Я пытаюсь понять, сравнивая NSString
рутину. Пожалуйста, обратите внимание на следующий код:Сравнение одного NSString больше или меньше другого NSString
// String
NSString *str1 = @"This is a string A";
NSString *str2 = @"This is a string B";
NSString *res;
NSComparisonResult compareResult;
compareResult = [str1 compare:str2];
if (compareResult == NSOrderedAscending)
NSLog(@"str1 < str2");
if (compareResult == NSOrderedSame)
NSLog(@"str1 == str2");
else // must be NSOrderedDescending
NSLog(@"str1 > str2");
Мой первый вопрос в том, как мы можем определить, является NSString
больше или меньше, чем другой? Это не число, так как именно мы его определяем?
NSString
состоит из символов Unichar, размер которых составляет 16 бит. Может быть, компилятор определяет фактический размер каждой строки и сравнивает ее?
Мой второй вопрос:
Все условия выполнены. Как это могло случиться? Строки разные, и мы получили все 3 возможных результата: str1 больше str2, меньше str2 и равно.
Сравнение строк выполняет лексическое упорядочение на основе каждого символа. В упрощенных выражениях он в основном выполняет буквенное сравнение. «B» больше, чем «A», например, так как B появляется после A. Теперь расширьте это, чтобы покрыть каждый символ Юникода. – rmaddy
Обратите внимание, что результаты сравнения в порядке, не более или менее. – zaph
Прочитайте тонкую спецификацию. (Но вышеприведенный код не мог произвести вышеупомянутый вывод консоли.) –