как отсортировать массив словарей - PullRequest
2 голосов
/ 16 апреля 2011

Мне нужно отсортировать массив словарей, используя ключевой объект из словаря. Объект представляет собой строку NSString, которая содержит число с плавающей точкой. Я использовал NSSortDescriptor, но он сортирует по алфавиту. Как бы я сделал пользовательский селектор или компаратор, чтобы сделать это численно?

1 Ответ

5 голосов
/ 16 апреля 2011

Это должно дать вам представление о том, как это можно сделать с помощью блоков NSComparator:

[array sortUsingComparator:(NSComparator)^(id obj1, id obj2){
    double firstValue = [[obj1 objectForKey:@"someKey"] doubleValue];
    double secondValue = [[obj2 objectForKey:@"someKey"] doubleValue];
    double valueDiff = firstValue - secondValue;
    return (valueDiff == 0) ? NSOrderedSame : (valueDiff < 0) ? NSOrderedAscending : NSOrderedDescending;
}];

obj1 и obj2 являются указателями id на пару объектов словаря в вашем массиве. Что бы вы ни делали в блоке NSComparator, решать только вам. Пока вы возвращаете NSOrderedSame, NSOrderedAscending или NSOrderedDescending.

Как правило, вам лучше использовать реальный числовой тип данных (а-ля [NSNumber numberWith...:x]) для хранения таких значений с плавающей запятой, чем строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...