Je peux obtenir un tableau de clés de dictionnaire trié par valeurs, mais comment obtenir un tableau de valeurs trié par clés de dictionnaire? J'ai cherché partout sans succès. Toute aide appréciée.
Cela pourrait fonctionner:
NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
NSArray * objects = [dict objectsForKeys: sortedKeys notFoundMarker: [NSNull null]];
ou à Swift
let objects = dict.keys.sorted().flatMap{ dict[$0] }
ou
let objects = dict.sorted{ $0.0 < $1.0 }.map{ $1 }
… Et c'est pourquoi vous devriez commencer à vous développer à Swift ????
Mon expérience montre que le tri de NSDictionary
par clés n’est pas très utile. Bien que, après logging
, les NSDictionary
semblent être triés, ils ne sont plus en état de les mettre dans une table.
Je suggère de stocker les clés dans une propriété NSArray
, puis d'interroger les objets NSDictionary
selon l'ordre des clés dans NSArray
.
Une solution consiste à construire le tableau de clés de dictionnaire triées, puis à créer un autre tableau de valeurs basé sur le tableau de clés:
//Construct array of sorted keys
NSArray keyarray = ... //etc
NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
[valuearray addObject:[dict objectForKey:key]];
}
J'ai créé une catégorie sur NSDictionary pour obtenir ce résultat:
@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