有没有办法计算和生成给定范围的Int32
个数字的唯一标识符?例如请看示例:
var range1 = [a, b, c, d];
var unique1 = GenerateUnique(range1);
var range2 = [b, a, d, c];
var unique2 = GenerateUnique(range2);
// unique1 and unique2 should be equal. I mean:
var areEqual = unique1 == unique2; // should be true
var range3 = [a, b, c, d];
var unique3 = GenerateUnique(range3);
// unique1 and unique3 should be equal. I mean:
areEqual = unique1 == unique3; // should be true
var range4 = [a, b, c, e]; // it has not d, but has e. different array.
var unique4 = GenerateUnique(range4);
// unique1 and unique4 should NOT be equal. I mean:
areEqual = unique1 == unique4; // should NOT be true / should be false
private int /* or even string */ GenerateUnique(int[] range) {
// what would be the implementation of this method?
}
更新
1-范围没有任何重复的成员。所以不会有[1, 2, 3, 4, 4]
集。所以,始终有[1, 2, 3, 4]
2-数组可以排序。没问题。
3- 目的:我在DB中有大量项目。有时,我需要生成一份Word
文档。并且,我不想重新生成以前生成的文档。而已。范围是可修改的,因此我想重新生成特定范围的文档,当且仅当项目被添加到/从范围中删除时。 注意:更改数据库并保存范围的最后更改不是一种选择。
答案 0 :(得分:4)
我认为对整数列表进行排序,然后使用任何标准哈希函数(MD5,SHA1,甚至是CRC32,如果你愿意的话)都可以正常工作。