实际编程总会涉及到比较两个字符串的内容,一般会用
1
| [string1 isEqualsToString:string2];
|
来比较两个字符串是否一致。对于字符串的isEqualsToString方法,需要逐个比较字符串的内容,是比较耗时的操作。
偶然间我发现NSString类里有个hash方法,作用是返回NSString实例的散列值。众所周知,内容相同的字符串拥有相同的散列值,内容不同的字符串拥有不同的散列值。所以完全可以根据字符串散列值来判断两个字符串是否一致。
于是上面比较字符串的写法可以这么写(一般比较字符串是if语句的判断条件):
1
| if ([string1 hash] == [string2 hash])
|
实践中发现了一个问题:有时候字符串返回的散列值为负数,而苹果文档说hash方法一定返回无符号数,不知是不是位数问题造成的。

例如:
NSString Hash Method Example
1
2
3
4
| NSString *string1 = @"yyb";
NSString *string2 = @"nijino_saki";
NSLog(@"string1 hash %d",[string1 hash]);
NSLog(@"string2 hash %d",[string2 hash]);
|
输出结果为:
Hash Result
1
2
| 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
|