Immer einzigartige Stücke aus NSMutableArray
Ich habe eine Frage zu Objective-C, die heute mit NSMutableArray. Das kommt von einem .net/c# hintergrund ich habe einige Schwierigkeiten mit diesen Dingen.
Sagen wir, ich habe ein Objekt namens "Song"
Mein Lied hat 3 Eigenschaften:
- Titel
- Künstler
- Genre
Ich habe ein NSMutableArray oder NSArray, welches hält alle meine Song-Objekten.
Wie würde ich gehen, um zu versuchen, 'query' mein array um ein neues array mit nur (Einmalig) die Künstler oder Genre.
Wo, wie in .net schreiben Sie eine einfache LINQ-Abfrage mit einer DISTINCT-Klausel, wie könnte man dies lösen, in Objective-C ? Ich vermute, mit Prädikaten, aber bin kämpfen, um eine Lösung zu finden.
Vielen Dank im Voraus.
InformationsquelleAutor Gidogeek | 2010-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Je nachdem, was du damit meinst "einzigartige Künstler," es gibt ein paar verschiedene Lösungen. Wenn Sie nur wollen, um all die Künstler und nicht wollen, dass jeder mehr als einmal vorkommt, nur
[NSSet setWithArray:[songArray valueForKey:@"artist"]]
. Wenn Sie meinen, Sie wollen, um eine Liste von allen songs, die der einzige song von Ihr Künstler, müssen Sie zuerst finden Sie die Künstler, die nur ein Lied und dann suchen Sie die songs von diesen Künstlern:InformationsquelleAutor Chuck
Könnte man auch verwenden:
Ebenso, wenn Sie brauchen, um zu vergleichen, das gesamte Objekt, das Sie erstellen Sie eine neue readonly-Eigenschaft, die vereint die Werte, die Sie anpassen möchten (über eine hash-oder anderweitig), die dynamisch und vergleichen:
HINWEIS: im Hinterkopf Behalten, das gibt die eindeutige Werte für die angegebene Eigenschaft, nicht die Objekte selbst. Es wird also ein array von NSString Werte, nicht Song-Werte.
Jeder Weg, um die Song-Wert anstelle der Zeichenfolge
Wenn Sie möchten, dass die unterschiedliche Objekte, die Sie verwenden sollten einen Satz in die akzeptierte Antwort. Sie können konvertieren Sie das array, um eine Reihe mit den-setWithArray Initialisierer (oder besser, starten Sie mit einem Satz aus dem start, wenn möglich). Sie können auch-isEqual und -hash überschreiben des Standard-Mechanismus für die Bestimmung der Einzigartigkeit des Objekts.
InformationsquelleAutor Luke
Oder so:
filterTags
war nicht einzigartig, aber einzigartig wird nach der operation.InformationsquelleAutor Aleksandr Shpagin
Diese nicht direkt anwendbar ist, aber es ist eine Lösung zur Erstellung von einen eindeutigen Satz von Werten...
Angenommen, Sie haben einen NSMutable Reihe von Veranstaltungen, die mehrere doppelte Einträge. Das array benannt ist eventArray. Die NSSet-Objekt kann verwendet werden, zu trimmen, dass array und dann wieder Auffüllen, das array wie unten gezeigt...
InformationsquelleAutor WDMuff
Verwenden NSOrderedSet statt NSSet.
InformationsquelleAutor CalZone
Habe ich eine einfache query-API für Objective-C, dass macht diese Art von Aufgabe viel einfacher. Mit der Linq-to-ObjectiveC verschiedene Methode, das abrufen von songs mit einzigartigen Künstlern würde bedeuten, die folgenden:
Dieser gibt eine Liste von song-Instanzen, die jeweils mit einer einzigartigen Künstlerin.
InformationsquelleAutor ColinE