7

NSDictionary をソートしようとしています。

Appleのドキュメントから、 次を使用できることがわかります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:と を使用して、NSStringCompareOptions比較を変更して別の方向に比較できることを読みました。

ただし、セレクターで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:コンパレータを使用して逆に呼び出す: (Thanks 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 に答える