如何获得二维阵列的唯一ID?

Hom*_*mam 0 c# algorithm multidimensional-array

我想要一种方法来获得二维数组的唯一ID.例如:

数组A:

[4,2,3]
[4,5,6]
[7,8,9]
Run Code Online (Sandbox Code Playgroud)

数组B:

[9,2,3]
[4,5,6]
[1,1,9]
Run Code Online (Sandbox Code Playgroud)

我想要一个函数知道A <> B而不保存整个A和整个B.

提前致谢

Jon*_*eet 7

好吧,要获得有保证的唯一值,您有效地保存数组的完整内容.您可以使用散列来告诉您一个阵列是否可能与另一个阵列相同,但如果没有无损转换,则无法获得唯一性.

作为简单散列函数的示例:

int hash = 17;
for (int i = 0; i < 3; i++) {
  for (int j = 0; j < 3; j++) {
    hash = hash * 31 + array[i, j];
  }
}
return hash;
Run Code Online (Sandbox Code Playgroud)

现在,两个不同的数组很可能会有不同的哈希 - 但它们可能不会.

您愿意花多少空间在ID上,以及阵列中每个值有多大?您愿意在ID中添加的信息越多,您获得误报的可能性就越小......直到您进入ID与阵列一样大的阶段,此时您可以确保您'会都没有,当然误报.