Проблема с использованием сравнения NSString: параметры: диапазон, противоречивые результаты - PullRequest
1 голос
/ 05 октября 2010

Ооо, что не так с этим кодом!?!?!

    NSString *s1 = @"5 Oct 2010 18:30";
    NSString *s2 = @"5 Oct 2010 09:47";
    NSRange range = {0, 11}; // Both "D MMM YYYY " and "DD MMM YYYY"
    NSComparisonResult result = 0;
    result = [s1 compare:s2 options:NSLiteralSearch range:range];
    // result == -1
    NSString *sa = [s1 substringWithRange:range];
    NSString *sb = [s2 substringWithRange:range];
    result = [sa compare:sb];
    // result == 0

Почему я получаю разные результаты от этих двух спортсменов? Насколько я могу судить, они должны быть одинаковыми?

Ответы [ 2 ]

7 голосов
/ 11 октября 2010

Вот лучший ответ, благодаря добрым людям из списка рассылки CocoaDev!

«Диапазон», указанный в сигнатуре метода, - это диапазон только принимающей строки .

Итак, в вашем первом примере вы сравниваете символы в диапазоне s1 со всем s2;и это, правильно, сообщается как -1.

Это также объясняет очевидную аномалию, отмеченную fluchtpunkt.

0 голосов
/ 05 октября 2010

В этом нет ничего плохого;sa и sb имеют одинаковые значения, а s1 и s2 - нет.

РЕДАКТИРОВАТЬ:

Извините, прочитайте это слишком быстро.Проблема действительно есть - см. Ниже.

...