如何为一系列 Int32 数字生成唯一标识符
How to generate a unique identifier for a range of Int32 numbers
有没有办法为给定范围的 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- 目的:我在数据库中有大量的项目。有时,我需要生成它们的 Word
文档。而且,我不想重新生成以前生成的文档。而已。范围是可修改的,所以我想为某个范围重新生成一个文档,当且仅当一个项目有 added/removed to/from 范围时。 注意:更改数据库并保存范围的最后更改不是一种选择。
我认为对整数列表进行排序,然后使用任何标准哈希函数(MD5、SHA1,如果需要,甚至是 CRC32)都可以完美地工作。
有没有办法为给定范围的 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- 目的:我在数据库中有大量的项目。有时,我需要生成它们的 Word
文档。而且,我不想重新生成以前生成的文档。而已。范围是可修改的,所以我想为某个范围重新生成一个文档,当且仅当一个项目有 added/removed to/from 范围时。 注意:更改数据库并保存范围的最后更改不是一种选择。
我认为对整数列表进行排序,然后使用任何标准哈希函数(MD5、SHA1,如果需要,甚至是 CRC32)都可以完美地工作。