Разбор в порядке с rangeOfString: - PullRequest
0 голосов
/ 26 марта 2012

У меня проблема в том, что я хочу разобрать строки по порядку, например, проанализировать «один три два», добавить это к другой строке и вывести «один три два». Я использую rangeOfString:, но когда я анализирую эту строку, она возвращает «один два три». Я знаю, что порядок анализа в моем случае - это размещение операторов if, но как мне разобрать эту строку по порядку? Вот мой код:

NSString *string = @"one three two";
NSString *newString;

if ([string rangeOfString:@"one"].location != NSNotFound)
{
    newString = [newString stringByAppendingString:@"one"];
}
if ([string rangeOfString:@"two"].location != NSNotFound)
{
    newString = [newString stringByAppendingString:@"two"];
}
if ([string rangeOfString:@"three"].location != NSNotFound)
{
    newString = [newString stringByAppendingString:@"three"];
}

NSLog(@"%@",newString);

1 Ответ

0 голосов
/ 26 марта 2012

Вы делаете это неправильно, вы должны использовать componentsSeparatedByString: и сортировку:

NSString *stringWithNumbersOrdered(NSString *input)
{
    static NSArray *numberStrings = nil;

    if (!numberStrings)
    {
        numberStrings = [NSArray arrayWithObjects:@"zero", @"one", @"two", @"three", @"four", @"five", @"six", @"seven", @"eight", @"nine", /* etc. */ nil];
    }

    NSArray *components = [input componentsSeparatedByString:@" "];
    NSArray *componentsSorted = [components sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        int value1 = [numberStrings indexOfObject:obj1];
        int value2 = [numberStrings indexOfObject:obj2];

        return value1 - value2;
    }];

    return [componentsSorted componentsJoinedByString:@" "];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...