値でソートされた辞書キーの配列を取得できますが、辞書キーでソートされた値の配列を取得するにはどうすればよいですか?私は運が悪いとどこでも探していました。助けてくれてありがとう。
これはうまくいくかもしれません:
NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
NSArray * objects = [dict objectsForKeys: sortedKeys notFoundMarker: [NSNull null]];
またはSwift
let objects = dict.keys.sorted().flatMap{ dict[$0] }
または
let objects = dict.sorted{ $0.0 < $1.0 }.map{ $1 }
…だから、Swift ????
私の経験では、NSDictionary
をキーでソートすることはあまり役に立ちません。 logging
の後はNSDictionary
がソートされているように見えますが、テーブルビューに配置する必要がある場合は、順序が正しくありません。
キーをNSArray
プロパティに格納し、NSDictionary
のキーの順序に従ってNSArray
オブジェクトをクエリすることをお勧めします。
1つの方法は、ソートされた辞書キーの配列を作成し、キーの配列に基づいて値の別の配列を作成することです。
//Construct array of sorted keys
NSArray keyarray = ... //etc
NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
[valuearray addObject:[dict objectForKey:key]];
}
これを達成するために、NSDictionaryにカテゴリを作成しました。
@implementation NSDictionary (Extra)
-(NSArray *) sortedKeys {
return [[self allKeys] sortedArrayUsingSelector:@selector(compare:)];
}
-(NSArray *) allValuesSortedByKey {
return [self objectsForKeys:self.sortedKeys notFoundMarker:[NSNull null]];
}
-(id) firstKey {
return [self.sortedKeys firstObject];
}
-(id) firstValue {
return [self valueForKey: [self firstKey]];
}
@end