если строка в алфавитном порядке больше, чем другая строка в объекте - PullRequest
22 голосов
/ 23 мая 2010

Я пытаюсь использовать оператор if, чтобы определить, какая из 2 строк идет первой в алфавитном порядке. Как с числами и больше и меньше чем:

if (1 < 2) {

только со строками:

if(@"ahello" < @"bhello") {

Или мне нужно было бы иметь строку, содержащую все буквы, а затем проверить индекс первого символа в каждой строке и посмотреть, какой индекс больше, а индекс, который меньше другого, идет первым в алфавите, а затем если они равны, перейти к следующему символу и повторить?

Ответы [ 2 ]

39 голосов
/ 24 мая 2010

Что вы можете сделать, это:

NSString *stringOne = @"abcdef";
NSString *stringTwo = @"defabc";

NSComparisonResult result = [stringOne compare:stringTwo];

if (result == NSOrderedAscending) // stringOne < stringTwo
    ...

if (result == NSOrderedDescending) // stringOne > stringTwo
    ...

if (result == NSOrderedSame) // stringOne == stringTwo
    ...

Существуют также другие методы для выполнения различных видов сравнений (таких как нечувствительность к регистру, диакритическая нечувствительность и т. Д.), Но результат сравнения все еще можно рассматривать как вышеописанный. Кроме того, некоторым людям легче сравнивать result с 0. Оператор, используемый для сравнения result с 0, будет тем же оператором, который используется в других языках, где сравнение строк может выполняться напрямую:

if (result < 0) // stringOne < stringTwo
    ...

if (result > 0) // stringOne > stringTwo
    ...

if (result == 0) // stringOne == stringTwo
    ...

Большинство (если не все) из compare:... методов NSString являются оболочками для compare:options:range:locale:. Различные типы опций, которые вы можете передать, можно найти здесь .

4 голосов
/ 23 мая 2010

NSString имеет целый ряд compare: методов, чтобы делать то, что вы хотите. Некоторые из них очень просты, а другие имеют множество параметров, которые можно использовать для настройки поведения. Ознакомьтесь с документацией .

...