【发布时间】:2015-04-27 15:12:41
【问题描述】:
有没有办法为给定的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 文档。而且,我不想重新生成以前生成的文档。就是这样。范围是可修改的,所以我想为某个范围重新生成一个文档,当且仅当一个项目被添加到/从范围中删除时。 注意:更改数据库并保存范围的最后更改不是一种选择。
【问题讨论】:
-
你勾起了我的兴趣,当你实现这个唯一标识符时,你想解决什么问题?什么目的?另外,[1,2,3,4,4] 是否应该产生与 [1,2,3,4] 相同的哈希?
-
您是否需要同时检查:相等和不相等?如果您只需要检查不等式,则可以使用 Janothon 的方法,否则可能需要更多逻辑。我们前段时间遇到过类似的问题。我会检查我是否可以获取资源...
-
为什么不先排序然后连接呢?
[1,2,3,4] -> 1234[3,2,4,1] -> 1234。还是我错过了什么?我想这取决于你的范围(以及其中的数字)有多大。 -
@Mvision 请查看更新
-
@germi,因为第 12 页可能被误解为第“1,2”页,但只需在不删除逗号的情况下订购它们就可以了..
标签: c# unique uniqueidentifier