OK, damit ich weiß, dass Wörterbücher nicht sortiert werden können. Aber, sagen wir, ich habe NSMutableArray *keys = [someDictionary allKeys];
Nun möchte ich diese Schlüssel, basierend auf den entsprechenden Werten im Wörterbuch (alphabetisch) sortieren. Also, wenn das Wörterbuch key=someString
enthält, dann möchte ich keys
basierend auf den Zeichenfolgen sortieren, denen sie entsprechen. Ich denke, es ist eine Anwendung von sortUsingComparator
, aber es ist ein wenig außerhalb meiner Reichweite zu diesem Zeitpunkt.Objective-C: Sortierschlüssel von NSDictionary basierend auf Wörterbucheinträgen
Antwort
NSArray *keys = [someDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *first = [someDictionary objectForKey:a];
NSString *second = [someDictionary objectForKey:b];
return [first compare:second];
}];
NSDictionary *dict = // however you obtain the dictionary
NSMutableArray *sortedKeys = [NSMutableArray array];
NSArray *objs = [dict allValues];
NSArray *sortedObjs = [objs sortedArrayUsingSelector:@selector(compare:)];
for (NSString *s in sortedObjs)
[sortedKeys addObjectsFromArray:[dict allKeysForObject:s]];
Jetzt sortedKey
enthält die Schlüssel nach ihren entsprechenden Objekten sortiert.
Was ist, wenn es nicht nur Schlüsselwert ist. Was ist, wenn jeder Schlüssel einem Wörterbuch entspricht und ich nach dem Schlüssel "name" in diesem Wörterbuch sortieren möchte? Tut mir leid, ich hätte das im OP erwähnen sollen. Danke für die Hilfe! – JoshDG
Es ist immer * nur "Schlüsselwert", denn dafür ist NSDictionary gedacht. Was Sie meinen, sind nicht-skalare Werte - in diesem Fall müssen Sie dies zu einer Funktion machen und Rekursion anwenden. –
Dies ist vom Standpunkt der Leistung nicht sehr clever und wird in einigen Fällen nicht das richtige Ergebnis liefern. – Sven
Schreiben Sie einfach hier, weil ich es nicht überall finden: Um eine alphanumerische zu erhalten sortiert NSDictionary zurück von einem NSDictionary basierend auf dem Wert - was in meinem Fall notwendig war - man kann folgendes tun:
//sort typeDict alphanumeric to show it in order of values
NSArray *keys = [typeDict allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSString *first = [typeDict objectForKey:a];
NSString *second = [typeDict objectForKey:b];
return [first compare:second];
}];
NSLog(@"sorted Array: %@", sortedKeys);
NSMutableDictionary *sortedTypeDict = [NSMutableDictionary dictionary];
int counter = 0;
for(int i=0; i < [typeDict count]; i++){
NSString *val = [typeDict objectForKey:[sortedKeys objectAtIndex:counter]];
NSString *thekey = [sortedKeys objectAtIndex:counter];
[sortedTypeDict setObject:val forKey:thekey];
counter++;
}
NSLog(@"\n\nsorted dict: %@", sortedTypeDict);
Keine große Sache!
war auf der Suche nach diesem, danke! –
Sortierschlüssel von NSDictionary basierend auf Wörterbuch Schlüssel
Abobe für mit basierend auf Wörterbuchinhhalt ein sortiertes Array zurückkehrt, ist dies für die Rückführung ein Array von Wörterbuchschlüssel sortiert:
NSArray *keys = [theDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
return [a compare:b];
}];
NSMutableArray *sortedValues = [NSMutableArray new];
for(NSString *key in sortedKeys)
[sortedValues addObject:[dictFilterValues objectForKey:key]];
- 1. Kann ich einen ObjectiveC @selector in ein NSDictionary einfügen?
- 2. Sortierschlüssel Arrays mit doppelten Schlüsseln
- 3. Vaccuming Redshift interleaved Sortierschlüssel
- 4. Frühling Redis Sortierschlüssel
- 5. ObjectiveC UISwitch Standard auf OFF setzen
- 6. 2D Dynamische Speicherzuweisung - ObjectiveC
- 7. AMF0 Parser in ObjectiveC
- 8. NSPredate (Nsdictionary + Array + Nsdictionary)
- 9. TwitPic API von ObjectiveC/iPhone verwenden
- 10. ObjectiveC - Freigabe von Objekten als Parameter
- 11. NSDictionary Von NSMutableData
- 12. ObjectiveC-Blöcke Java-Äquivalent
- 13. Konvertieren von NSDictionary initWithObjectAndKeys
- 14. Verarbeitung von NSDictionary-Daten
- 15. Wie NSDictionary von NSURLSessionDataTask
- 16. ObjectiveC - wie NSUserNotification Kennung Eigenschaft
- 17. ObjectiveC - Anzeigefenster durch verteilte Objekte
- 18. Instanziieren Kundenspezifische Klasse von NSDictionary
- 19. Umwandlung von JSON-Objekt in Nsdictionary von Nsstring auf iPhone
- 20. Redshift: Sollte der Sortierschlüssel den Distkey enthalten?
- 21. Sind Python-Sortierschlüssel garantiert nur einmal aufgerufen?
- 22. Präsentieren Sie kleine ModalViewController ObjectiveC
- 23. ObjectiveC: Wo private Instanzeigenschaften deklarieren?
- 24. NSArray von NSDictionary - Einfache Initialisierungssyntax
- 25. Verwendung von Hredis vs NSDictionary
- 26. NSDictionary setValue:
- 27. NSDictionary writeToFile
- 28. Erstellen NSDictionary-Backed-Objekte
- 29. NSDictionary verwenden
- 30. CALayer.compositingFilter funktioniert auf ObjectiveC aber nicht in swift
Weder 'keys' noch' sortedKeys' sind hier ein veränderbares Wörterbuch, sie sind unveränderlich. –
ops du meinst ein veränderbares Array? Ich habe nur kopieren und einfügen von der Frage ha – mask8
ja, ich meinte veränderbare Array. –