Сортировать NSMutableArray - PullRequest
       27

Сортировать NSMutableArray

0 голосов
/ 24 августа 2010

пожалуйста, помогите мне Я хочу отсортировать NSMutableArray и да, я могу сделать это с помощью

NSSortDescriptor *sortPoint = [[NSSortDescriptor alloc] initWithKey:@"point" ascending:YES];
[hightScore sortUsingDescriptors:[NSArray arrayWithObject:sortPoint]];

но в NSMuatableArray (hightScore) у меня есть 2 NSMutableDictionary, как это

[item setObject:@"player_name" forKey:@"name"];
[item setObject:@"100" forKey:@"point"];

и когда я сортирую по ключевому слову "точка", то есть строка, это дает мне вот так 100> 20> 30> 50 вместо этого должно быть 20> 30> 50> 100

есть идеи, пожалуйста.

Ответы [ 3 ]

1 голос
/ 24 августа 2010

Существует три решения:

  1. Поместите экземпляры NSNumber в словари вместо строк (например, @"100"), которые у вас есть на данный момент.NSNumber объекты должны сравнивать себя численно.
  2. Отправлять массиву сообщение sortUsingComparator: или sortUsingFunction:context: вместо sortUsingDescriptors:, передавая блок или функцию, которая извлекает строки и сравнивает их численно (отправляяих compare:options: сообщения с опцией NSNumericSearch).

    Обратите внимание, что блоку или функции будут передаваться целые словари, а не строки, поскольку он не может узнать, какиестроки для извлечения, поэтому вам придется самостоятельно извлекать строки из словарей, чтобы сравнить их.

  3. Замените словари объектами модели , имеющими свойства вместо словарных ключей.Если вы объявляете свойство с числовым типом (например, NSUInteger), то когда массив использует KVC для доступа к свойству, он получит объекты NSNumber, которые, как отмечено в пункте 1 выше, должны сравнивать себя численно.

Я бы пошел с # 3.

1 голос
/ 05 мая 2011

Лучший способ сделать это - сохранить ваши номера как NSNumbers:

[index addObject:[[NSNumber alloc] initWithInt:number]];

Затем вы можете отсортировать ваш массив, используя метод [NSNumber compare:]:

[index sortUsingSelector:@selector(compare:)];
0 голосов
/ 24 августа 2010
NSMutableArray* tempArray = [NSMutableArray arrayWithArray:anArray];
[tempArray sortUsingSelector:@selector(caseInsensitiveCompare:)];

Я использую это в каком-то коде?Будет ли это работать?

Кроме того, только что заметил, что вы устанавливаете объекты массива как строки, которые, как я предполагаю, также будут проблемой.Попробуйте добавить их как NSIntegers или Ints ... это работает вообще?

...