如何为一系列Int32数生成唯一标识符

时间:2015-04-27 15:12:42

标签: c# unique uniqueidentifier

有没有办法计算和生成给定范围的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文档。并且,我不想重新生成以前生成的文档。而已。范围是可修改的,因此我想重新生成特定范围的文档,当且仅当项目被添加到/从范围中删除时。 注意:更改数据库并保存范围的最后更改不是一种选择。

1 个答案:

答案 0 :(得分:4)

我认为对整数列表进行排序,然后使用任何标准哈希函数(MD5,SHA1,甚至是CRC32,如果你愿意的话)都可以正常工作。