7

我正在尝试对 NSDictionary 进行排序。

Apple docs 我看到你可以使用keysSortedByValueUsingSelector

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
    [NSNumber numberWithInt:63], @"Mathematics",
    [NSNumber numberWithInt:72], @"English",
    [NSNumber numberWithInt:55], @"History",
    [NSNumber numberWithInt:49], @"Geography",
    nil];

NSArray *sortedKeysArray = [dict keysSortedByValueUsingSelector:@selector(compare:)];

这使:

// sortedKeysArray contains: Geography, History, Mathematics, English

但我想要:

// sortedKeysArray contains: English, Mathematics, History, Geography

我读过您可以使用compare:options:, 和 anNSStringCompareOptions来更改比较以在另一个方向进行比较。

但是我不明白您如何使用选择器中compare:options: 的选项发送。

我想做这样的事情:

NSArray *sortedKeysArray = [dict keysSortedByValueUsingSelector:@selector(compare:options:NSOrderDescending)];

我应该如何切换比较的顺序?

相关: https ://discussions.apple.com/thread/3411089?start=0&tstart=0

4

2 回答 2

13

选项 1:使用比较器-compare:反向调用:(感谢 Dan Shelly!)

NSArray *blockSortedKeys = [dict keysSortedByValueUsingComparator: ^(id obj1, id obj2) {
     // Switching the order of the operands reverses the sort direction
     return [objc2 compare:obj1];
}];

只需颠倒降序和升序的 return 语句,你就应该得到你想要的。

选项2:反转您拥有的数组:

请参阅如何在 Objective-C 中反转 NSArray?

于 2013-04-05T03:27:16.477 回答
4

我用 :

    NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO];
    self. sortedKeys = [[self.keyedInventoryItems allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortOrder]];
于 2013-04-05T03:24:03.523 回答