美文网首页算法<Hash>
iOS NSString.hash 散列值

iOS NSString.hash 散列值

作者: 村雨灬龑 | 来源:发表于2017-05-17 17:53 被阅读31次

实际编程总会涉及到比较两个字符串的内容,一般会用
[string1 isEqualsToString:string2]
来比较两个字符串是否一致。对于字符串的isEqualsToString方法,需要逐个比较字符串的内容,是比较耗时的操作。
偶然间我发现NSString类里有个hash方法,作用是返回NSString实例的散列值。众所周知,内容相同的字符串拥有相同的散列值,内容不同的字符串拥有不同的散列值。所以完全可以根据字符串散列值来判断两个字符串是否一致。
于是上面比较字符串的写法可以这么写(一般比较字符串是if语句的判断条件):

if ([string1 hash] == [string2 hash]){ }

实践中发现了一个问题:有时候字符串返回的散列值为负数,而苹果文档说hash方法一定返回无符号数,不知是不是位数问题造成的。

例如:

NSString *string1 = @"yyb";
NSString *string2 = @"nijino_saki";
NSLog(@"string1 hash %d",[string1 hash]);
NSLog(@"string2 hash %d",[string2 hash]);  

输出结果为:

2013-06-19 18:47:11.612 test[26719:c07] string1 hash 530522127
2013-06-19 18:47:11.613 test[26719:c07] string2 hash -975949159

我觉得最后输出负数是很正常的,例如:

unsigned int i = 0xffffffff;
NSLog(@"%d", i);

最后显示是-1,因为%d选项将unsigned int当成int输出了,0xffffffff 对应的就是 -1

相关文章

  • iOS NSString.hash 散列值

    实际编程总会涉及到比较两个字符串的内容,一般会用[string1 isEqualsToString:string2...

  • 散列

    散列值与相等性 等值对象的散列值必须相等。散列相等未必等值。 散列表算法 其他说明 key必须是可散列的。可散列需...

  • 15.散列

    1.定义 1.1几个概念 键值(key)散列函数(hash)散列值一句话:键值通过散列函数得到散列值; 装载因子:...

  • 小白入门——哈希算法

    哈希 哈希(Hash)也称为散列,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,这个输出值就是散列值。...

  • 单向散列函数

    单向散列函数的说明单向散列函数也称为消息摘要函数, 哈希函数 或者 杂凑函数单向散列函数输出的散列值又称为消息摘要...

  • Redids 散列表

    1 .散列可以存储多个键值对之间的映射.散列存储的键值对的值可以是字符串又可以是数字值,并且用户同样可以对散列存储...

  • 什么是Hash结构

    Hash,即“散列”,就是把任意长度的输入通过散列算法,变换成固定长度输入,该输出就是散列值。

  • hash碰撞的解决办法

    hash : 翻译为“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。 开放地址...

  • 入门密码学②Hash

    单向散列函数(哈希函数) 单向散列函数 有一个输入和一个输出,其中输入称为消息,输出称为散列值,也就是Hash。散...

  • Perl 6 中散列的键和值

    Perl 6 中散列的键和值 今天,我们将看看 Hash 类的几个返回散列所有键或值或同时返回键和值的方法: 虽然...

网友评论

  • 阿福lfy:hash出来的整数,能再反hash到字符串吗?

本文标题:iOS NSString.hash 散列值

本文链接:https://www.haomeiwen.com/subject/coodxxtx.html