В чем разница между localizedCaseInsensitiveCompare: и caseInsensitiveCompare :? - PullRequest
4 голосов
/ 08 января 2012

Я собирался использовать следующую строку кода:

[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(caseInsensitiveCompare:)];

caseInsensitiveCompare - это метод, который я привык использовать в строках. Но, пример показал, что я работал с использованием:

[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];

(разница в том, что слово локализовано). Что означает это слово - чем «локализованный» метод отличается от обычного метода?

Документация для разработчиков Apple не очень информативна относительно того, как эти два метода различаются.

Ответы [ 4 ]

14 голосов
/ 08 января 2012

Это означает, что для сравнения компаратор использует национальные наборы символов.
В примере на польском языке есть буква Ł, которая в наборе национальных символов находится между L и M.

Например, когда у нас есть строки: Ltest, Łtest, Mtest, Ztest:

caseInsensitiveCompare дает в результате: Ltest, Mtest, Ztest, Łtest
localizedCaseInsensitiveCompare дает в результате: Ltest, Łtest, Mtest, Ztest

10 голосов
/ 08 января 2012

NSString предоставляет оба метода, caseInsensitiveCompare и localizedCaseInsensitiveCompare.

Некоторые локали могут определять разные критерии сортировки. Если вы работаете с текстом, локализованным для разных локалей, используйте локализованную версию. В противном случае используйте стандартную версию.

5 голосов
/ 08 января 2012

Метод localizedCaseInsensitiveCompare: будет использовать любые правила, существующие для текущей локали ([NSLocale currentLocale]), при сортировке данных. Эти правила часто включают в себя приоритет нумерации, порядок символов не-ASCII и т. Д.

По сути, если вы не ожидаете упорядочения по коду символа, вам следует использовать локализованный метод.

Если вы раньше не работали с локализацией, я бы порекомендовал проверить следующие ссылки:

5 голосов
/ 08 января 2012

localizedCaseInsensitiveCompare: является локализованной версией caseInsensitiveCompare:. Так как в английской локали нет большой разницы, то есть, например. на польском языке для ł, ą, ę и т. д. или на испанском языке для ñ, é, á и т. д. или на французском языке для ç, è, ê и т. д. Они имеют различную позицию в алфавите в зависимости от локали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...