2011-10-04 64 views
0

我知道有可能使用方法compare:isEqualToString:,我想isEqualToString是最有效的方法如果你知道它是一个字符串。但我的问题是,还有另一种更有效的方法吗?就像比较字符或类似的东西。如何有效比较两个NSString

+1

你为什么认为'比较:'和'isEqualToString:'对你来说效率不够? – Alex

+0

我不知道我想知道它,因为我的程序使用这个函数很多,但daveoncode的答案让我头疼。 – Gustavo

回答

4

通过读取文档:

比较使用串的规范表示,这对于一个特定的字符串是字符串加上Unicode字符组成的字符串的长度。当此方法比较两个字符串时,如果单个Unicode相同,则字符串相等,而不管后备存储如何。当应用于字符串比较时,“文字”意味着不应用各种Unicode分解规则,并且单独比较Unicode字符。因此,例如,表示为组合字符序列“O”的“Ö”,并且变音符不会等于表示为一个Unicode字符的“Ö”。

和:

当你知道这两个对象都是字符串,这个方法是检查平等的isEqual相比更快的方法:。

它似乎是最好的方法来比较字符串,并且它完全符合您的需要,即:首先检查长度(如果2个字符串具有不同的长度,则不需要检查每个包含的字符),那么如果长度相同,则比较每个字符。简单而高效!

3

isEqualToString:如果您知道两个对象都是字符串,则会更快,如documentation所述。

1

您可以尝试将这两个字符串转换为C字符串,然后使用strcmp。怀疑它实际上会更快。

char *str1 = [myNSString1 UTF8String]; 
char *str2 = [myNSString2 UTF8String]; 
BOOL isEqual = strcmp(str1,str2);