【问题标题】:How to generate a unique identifier for a range of Int32 numbers如何为一系列 Int32 数字生成唯一标识符
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 嗯。在stackoverflow.com/questions/4014090/… 上有一个关于散列函数概率的长时间讨论。我认为之后检查散列 和内容 可能是一种防弹方法。
  • 感谢您的想法。实际上,我有数百万个范围,其中包含很多项目,所以我无法创建一个单元测试来帮助我测试所有可用的可能性。所以,我不能使用I think 方法。我正在寻找一个 100% 可行的建议。请问你有什么想法吗?
  • @Javad_Amiry 我认为您应该编写代码并尝试一下。显然,您不能对每种可能的组合进行单元测试,这很荒谬。只需测试一般情况,以及您能想出的所有极端情况。您在 StackOverflow 上找到的任何内容永远都不应被视为“100% 可行的建议”
  • @JonathonReinhart 你是绝对正确的。我不是一个很好的英语演讲者,所以... 100% 工作解决方案,我的意思是其他人以前使用过的解决方案。我不知道该怎么说:)
  • @TheodorosChatzigiannakis 请参阅我之前的评论。有误会:)
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多