作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要唯一标识一对 Facebook
用户 ID。我就是这样做的:
NSString *firstId = @"123456789";
NSString *secondId = @"987654321";
NSUInteger first_hash = [firstId hash];
NSUInteger second_hash = [secondId hash];
NSUInteger combinedHash = first_hash ^ second_hash;
NSUInteger reverseHash = second_hash ^ first_hash;
NSLog(@"Combined hash %d\nReverse hash %d", combinedHash, reverseHash); // both are equal
好吧,现在我知道无论哈希组合的顺序如何,我都会得到相同的值。那挺好的。但是这个值能保证是唯一的吗?或者 id 的组合 322233322
和 233322233
可能会产生与 combinedHash
相同的值?如果是这样,那么如何为一对 ID 制作唯一标识符?
最佳答案
在不了解 ObjectiveC 的情况下,看起来您只是对值进行异或运算。
这当然不是独一无二的。
101^100 = 001
001^000 = 001
就这么简单。
它必须是不可逆的哈希值还是只需要一个唯一的 ID?
后者:只是连接,中间有一个唯一的分隔符。
否则,根据可能的最大输入长度,唯一哈希可能是不可能的。
(没有发明一个全新的算法,这可能需要时间:))
编辑,关于两种可能的连接顺序:
只需在连接之前比较两个数字,然后将较小的数字放在第一位即可。
这样一来,任何按 ID 的搜索都不必重复两次。
关于ios - 这个散列保证是唯一的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21644586/
我是一名优秀的程序员,十分优秀!