Как отсортировать числа в массиве от младшего к старшему

#iphone #sdk #iphone-sdk-4.1

#iPhone #sdk #iphone-sdk-4.1

Вопрос:

Я пытаюсь отсортировать массив цен от низкого к высокому. У меня это работает, но не так, как я хочу. Короче говоря, сортировщик расставляет числа по порядку следующим образом: 100 10900 200 290

вместо такой сортировки

100
200
290
10900

вот мой код, с помощью которого я это делаю.

 -(void)filterPriceLowHigh {
    NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"ListPrice"
        ascending:YES] autorelease];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    NSArray *sortedArray;
    sortedArray = [app.vehiclesArrayToDisplay
        sortedArrayUsingDescriptors:sortDescriptors];
    [app.vehiclesArrayToDisplay removeAllObjects];
    [app.vehiclesArrayToDisplay addObjectsFromArray:sortedArray];
}
  

Кто-нибудь может сказать мне, что мне нужно здесь сделать?
заранее спасибо.

Комментарии:

1. Я не хочу быть капитаном очевидным, но числа сортируются как строки. Вы проверили тип данных этого поля?

2. да, «listprice» представляет собой строку — что мне нужно сделать / преобразовать, чтобы заставить их сортировать так, как я хочу?

Ответ №1:

Создайте дескриптор сортировки следующим образом:

 sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"ListPrice"
                                               ascending:YES
                                              comparator:^(id obj1, id obj2) {
    return [obj1 compare:obj2 options:NSNumericSearch];
}];
  

Комментарии:

1. Превосходно!! спасибо за это … я подумал, что мне определенно нужно преобразовать мою строку, но не с помощью этого фрагмента кода. — еще раз спасибо.

2. Кстати, вы можете отсортировать vehiclesArrayToDisplay на месте с помощью -sortUsingDescriptors: . Нет необходимости создавать отдельный NSArray.

3. @OleBegemann К сожалению, я не могу использовать SortDescriptor с comparator в CoreData fetchRequest 🙁

Ответ №2:

Сначала вам нужно преобразовать ваши NSString в NSNumbers. Посмотрите документацию для NSNumberFormatter и метод экземпляра numberFromString .