Ich kann ein Array von Wörterbuchschlüsseln nach Werten sortieren, aber wie bekomme ich ein Array von Werten, die nach Wörterbuchschlüsseln sortiert sind? Ich habe überall ohne Glück gesucht. Jede Hilfe geschätzt.
Das könnte funktionieren:
NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];
NSArray * objects = [dict objectsForKeys: sortedKeys notFoundMarker: [NSNull null]];
oder in Swift
let objects = dict.keys.sorted().flatMap{ dict[$0] }
oder
let objects = dict.sorted{ $0.0 < $1.0 }.map{ $1 }
… Und deshalb sollten Sie mit der Entwicklung in Swift beginnen ????
Meine Erfahrung zeigt, dass das Sortieren von NSDictionary
nach Schlüsseln nicht sehr nützlich ist. Obwohl nach logging
die NSDictionary
scheinbar sortiert sind, sind sie nicht mehr in der richtigen Reihenfolge, wenn sie in eine Tabellenansicht eingefügt werden sollen.
Ich schlage vor, die Schlüssel in einer NSArray
-Eigenschaft zu speichern, und frage dann die NSDictionary
-Objekte entsprechend der Reihenfolge der Schlüssel in der NSArray
ab.
Eine Möglichkeit besteht darin, ein Array von sortierten Wörterbuchschlüsseln zu erstellen und dann ein anderes Array der Werte basierend auf dem Array von Schlüsseln zu erstellen:
//Construct array of sorted keys
NSArray keyarray = ... //etc
NSMutableArray valuearray = [[NSMutableArray alloc] init];
for (id key in keyarray) {
[valuearray addObject:[dict objectForKey:key]];
}
Ich habe eine Kategorie in NSDictionary erstellt, um dies zu erreichen:
@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