Der beste Weg, um ein NSArray von NSDictionary-Objekten zu sortieren?

69

Ich habe Probleme damit, eine Reihe von Wörterbüchern zu sortieren.

Meine Wörterbücher haben einige Werte von Interesse, Preis, Popularität usw.

Irgendwelche Vorschläge?

iOSDevil
quelle

Antworten:

201

Verwenden Sie NSSortDescriptorwie folgt ..

NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES];
stories = [stories sortedArrayUsingDescriptors:@[descriptor]];
recent = [stories copy];

storiesist das Array, das Sie sortieren möchten. recentist ein weiteres veränderbares Array, das Wörterbuchwerte sortiert hat. Ändern Sie den @"interest"mit dem Schlüsselwert, nach dem Sie sortieren müssen.

Alles Gute

Krieger
quelle
12
Das ist gut, aber es leckt. 1) Der Sortierdeskriptor sollte freigegeben oder automatisch freigegeben werden. 2) Der Kopieraufruf wird nicht benötigt. Die Zeile kann gelöscht werden.
Tom Andersen
5
NSSortDescriptor * descriptor = [[[NSSortDescriptor alloc] initWithKey: @ "Interesse" aufsteigend: JA] Autorelease]; [Geschichten sortUsingDescriptors: [NSArray arrayWithObjects: Deskriptor, nil]];
Tom Andersen
2
Sie können NSSortDescriptor verwenden. * Descriptor = [NSSortDescriptor sortDescriptorWithKey: @ "Interesse" aufsteigend: JA];
Maxcanna
1
Recent = [[Geschichten sortiertArrayUsingDescriptors: [NSArray ArrayWithObjects: Descriptor, nil]] copy];
J3RM
Sie müssen die Ausgabe während des Sortieraufrufs speichern: NSArray * Recent = [Geschichten sortiertArrayUsingDescriptors: [NSArray arrayWithObjects: Deskriptor, nil]];
Rob
25
[array sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"YOUR-KEY" ascending:YES], nil]];

Ich möchte es nicht wirklich in mehrere Zeilen aufteilen. Für mich ist es schon einfach genug.

superarts.org
quelle
NSSortDescriptor * descriptor = [NSSortDescriptor sortDescriptorWithKey: @ "name" aufsteigend: YES]; [resultArray1 sortUsingDescriptors: [NSArray arrayWithObjects: deskriptor, nil]];
Johndpope
11

Sie können einfach vom übergeordneten Element zur erforderlichen untergeordneten Eigenschaft wechseln. Zum Beispiel

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"parent.child.child"  ascending:YES];
Ansari Awais
quelle
Du kleiner Stern. Dies hat mir geholfen, ein Sub-Sub-Wörterbuch zu sortieren. Vielen Dank!
Rambatino
Es beantwortet die Frage nicht!
Rambatino
4

Update, sortUsingDescriptors ist jetzt sortiertArrayUsingDescriptors

Also, es ist wie:

items  = [items sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
dijipiji
quelle
Sie scheinen verwirrend zu sein - [NSArray sortedArrayUsingDescriptors]und - [NSMutableArray sortUsingDescriptors]. Die neueste Version ist noch vorhanden und wurde nicht ersetzt.
Dalzhim
0

Schreiben Sie eine Sortierfunktion, die die relevanten Felder in zwei Wörterbüchern vergleicht. Wenn Sie diese Version haben, können Sie beispielsweise NSArray#sortedArrayUsingFunction:context:Ihr Array sortieren.

Siehe NSArray-Klassenreferenz

Stefan Arentz
quelle
0
array = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"YOUR-KEY" ascending:YES], nil]];

Denken Sie daran, dem Array zuzuweisen

Angus Lam
quelle