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?

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


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.


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];

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]];

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


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

Denken Sie daran, dem Array zuzuweisen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.