美文网首页算法<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

    相关文章

      网友评论

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

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

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