zoukankan      html  css  js  c++  java
  • 利用NSString的Hash方法比较字符串

    实际编程总会涉及到比较两个字符串的内容,一般会用

    [string1 isEqualsToString:string2]

    来比较两个字符串是否一致。对于字符串的isEqualsToString方法,需要逐个比较字符串的内容,是比较耗时的操作。

    偶然间我发现NSString类里有个hash方法,作用是返回NSString实例的散列值。众所周知,内容相同的字符串拥有相同的散列值,内容不同的字符串拥有不同的散列值。所以完全可以根据字符串散列值来判断两个字符串是否一致。

    于是上面比较字符串的写法可以这么写(一般比较字符串是if语句的判断条件):

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

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

    image

    例如:

    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

  • 相关阅读:

    双向链表
    obs分析 笔记
    循环链表
    静态链表
    链式顺序表
    线性表
    ffmpeg-4.1.1-win64-dev在vs2017的搭建
    G1 与 CMS 两个垃圾收集器的对比
    垃圾回收算法有几种类型? 他们对应的优缺点又是什么?
  • 原文地址:https://www.cnblogs.com/yingkong1987/p/3292861.html
Copyright © 2011-2022 走看看