Как сравнить два NSString эффективно - PullRequest
0 голосов
/ 04 октября 2011

Я знаю, что можно использовать методы compare: и isEqualToString:, и я полагаю, isEqualToString является наиболее эффективным методом, если вы знаете, что это строкаНо мой вопрос, есть ли другой способ сделать это более эффективно?Например, сравнивать char с char или что-то в этом роде.

Ответы [ 3 ]

4 голосов
/ 04 октября 2011

При чтении документации:

Для сравнения используется каноническое представление строк, которое для конкретной строки представляет собой длину строки плюс символы Юникода, составляющие строку.Когда этот метод сравнивает две строки, если отдельные Unicodes одинаковы, тогда строки равны, независимо от резервного хранилища.«Литерал» при применении к сравнению строк означает, что различные правила декомпозиции Unicode не применяются, а символы Unicode сравниваются по отдельности.Так, например, «Ö», представленный в виде составленной последовательности символов «O», и умлаут не будут сравниваться равными «Ö», представленному в виде одного символа Юникода. Когда вы знаете, что оба объекта являются строками, этот метод является более быстрым способом проверки равенства, чем isEqual:.

кажется, что это лучший доступный метод для сравнения строк и что он выполняет точното, что вам нужно, то есть: сначала он проверяет длину (если 2 строки имеют разную длину, нет необходимости проверять каждый содержащийся символ), затем, если длина одинакова, он сравнивает каждый символ.Просто и эффективно!

3 голосов
/ 04 октября 2011

isEqualToString: быстрее, если вы знаете, что оба объекта являются строками, как указано в документации .

1 голос
/ 04 октября 2011

Вы можете попробовать преобразовать обе строки в строки C, а затем использовать strcmp. Сомневаюсь, что на самом деле это будет быстрее.

char *str1 = [myNSString1 UTF8String];
char *str2 = [myNSString2 UTF8String];
BOOL isEqual = strcmp(str1,str2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...