25

値でソートされた辞書キーの配列を取得できますが、辞書キーでソートされた値の配列を取得するにはどうすればよいですか?私は運がなくてどこでも探していました。助けていただければ幸いです。

4

4 に答える 4

45

これはうまくいくかもしれません:

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で開発を始めるべき理由です

于 2011-09-30T15:11:59.487 に答える
2

1つの方法は、ソートされた辞書キーの配列を作成し、キーの配列に基づいて値の別の配列を作成することです。

//Construct array of sorted keys
NSArray keyarray = ... //etc

NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
    [valuearray addObject:[dict objectForKey:key]];
}
于 2011-09-30T15:13:40.283 に答える
2

私の経験ではNSDictionary、キーによる並べ替えはあまり役に立ちません。それらはソートされloggingNSDictionaryように見えますが、テーブルビューに配置する必要がある場合は、もはや順序付けられていません。

キーをプロパティに格納してから、のキーの順序に従ってオブジェクトNSArrayをクエリすることをお勧めします。NSDictionaryNSArray

于 2012-07-28T03:11:45.717 に答える
1

これを実現するために、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
于 2014-04-23T08:51:32.773 に答える