Сортировать NSMutableDictionary ключи по объекту? - PullRequest
0 голосов
/ 05 августа 2011

Okeh. Вот сделка: Иметь NSMutualDictionary со словами в качестве ключей (скажем, имена). Значением объекта является NSNumber (например, рейтинг)

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:[NSNumber intValue:1] forKey:@"Melvin"];
[dictionary setObject:[NSNumber intValue:2] forKey:@"John"];
[dictionary setObject:[NSNumber intValue:3] forKey:@"Esben"];

Сначала я хочу отсортировать их по самым высоким рейтингам.

Я знаю, что собираюсь сделать это так:

[searchWords keysSortedByValueUsingSelector:@selector(intCompare:)];

Но не уверен, как реализовать intCompare. (метод сравнения)

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

- (NSComparisonResult) intCompare:(NSString *) other
{
//What to do here?
}

Я хочу получить NSArray с {Эсбен, Джон, Мелвин}.

Ответы [ 3 ]

1 голос
/ 05 августа 2011
NSArray *sortedArray = [searchWords sortedArrayUsingSelector:@selector(compare:) ];

или, возможно, вы используете, вот реализация вашего селектора intCompare

- (NSComparisonResult) intCompare:(NSString *) other
{
    int myValue = [self intValue];
    int otherValue = [other intValue];
    if (myValue == otherValue) return NSOrderedSame;
    return (myValue < otherValue ? NSOrderedAscending : NSOrderedDescending);

}

1 голос
/ 05 августа 2011

Поскольку объекты, которые вы помещаете в словарь, являются NSNumber экземплярами, вам следует немного изменить сигнатуру метода.Но полная реализация действительно проста:

-(NSComparisonResult)intCompare:(NSNumber*)otherNumber {
    return [self compare:otherNumber];
}

На самом деле я не вижу причин, почему вам нужно использовать свой собственный метод intCompare:, когда вы можете использовать compare:, который NSNumberуже есть.

1 голос
/ 05 августа 2011
These constants are used to indicate how items in a request are ordered.

enum {
   NSOrderedAscending = -1,
   NSOrderedSame,
   NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

Это взято из документации Apple по типам данных ... теперь все, что вам нужно сделать, это проверить, какой из них больше. Все это сделано для вас, хотя. Просто введите @selector (сравните :), и это должно быть сделано. Поскольку ваши значения NSNumbers, а NSNumber реализует функцию сравнения: Что ты хочешь:)

...