Erstellen Sie ein NSSet von NSArray basierend auf der Eigenschaft

8

Wie erstellt man ein NSSet von Objekten aus einem Array basierend auf einer Eigenschaft.

z.B. Ein Array von Objekten mit jeweils einem starken Verweis auf eine type -Eigenschaft und mehrere Vorkommen jedes Typs sind im Array vorhanden. Wie kann dies in ein NSSet umgewandelt werden, das ein einzelnes Objekt jedes Typs enthält.

    
jarryd 07.03.2013, 02:52
quelle

5 Antworten

7
%Vor%     
Kirby Todd 07.03.2013 03:05
quelle
2

Ein Wörterbuch hat diese Funktionalität im Wesentlichen bereits. Seine Schlüssel sind ein Satz, so dass Sie das Wörterbuch erstellen können, um die Objekte zu halten, die von einem beliebigen Attribut abhängig sind:

%Vor%

Wenn Sie das Wörterbuch jetzt nach allValues fragen, haben Sie nur ein Objekt für jedes Attribut. Ich sollte erwähnen, dass bei diesem Verfahren die späteren Objekte zugunsten früherer gehalten werden. Wenn die Reihenfolge Ihres ursprünglichen Arrays signifikant ist, kehren Sie es vor dem Erstellen des Wörterbuchs um.

Sie können diese Objekte nicht tatsächlich in NSSet einfügen, da% ce_de% die Methoden NSSet und isEqual: der Objekte verwendet, um zu bestimmen, ob es sich um Member handelt, und nicht um das Schlüsselattribut (von Natürlich können Sie diese Methoden überschreiben, wenn dies Ihre eigene Klasse ist, aber das würde wahrscheinlich ihr Verhalten in anderen Sammlungen stören.

Wenn du wirklich das Gefühl hast, dass du ein Set brauchst, musst du deine eigene Klasse schreiben. Sie können hash von der Unterklasse ableiten, aber die gängige Meinung ist, dass das Zusammenstellen von Cocoa-Sammlungen viel einfacher ist als das Unterklassifizieren. Im Wesentlichen schreiben Sie eine Klasse, die alle Methoden abdeckt, an denen Sie interessiert sind. Hier ist eine (ziemlich unvollständige und völlig unerprobte) Skizze:

%Vor% %Vor%     
Josh Caswell 07.03.2013 20:41
quelle
0
%Vor%     
Rey Gonzales 07.03.2013 03:03
quelle
0

Sie würden verwenden:

%Vor%

Dies sollte unabhängig vom Typ der Objekte in Ihrem Array funktionieren und das NSSet mit nur einem Vorkommen doppelter Objekte in Ihrem Array füllen.

Ich hoffe, das hilft.

Aktualisierung: Nächstbeste Sache: Verwenden Sie zuerst die Verkettung von Klassennamen und Objekteigenschaften und dann die obige Methode.

%Vor%

Ich bin nicht sicher, wofür Sie die NSSet-Ausgabe verwenden werden, aber Sie können wahrscheinlich die Verkettungselemente ändern, um die Informationen zu erhalten, die Sie in der NSSet-Ausgabe benötigen.

    
Spectravideo328 07.03.2013 02:59
quelle
0

Ich habe eine einfache Bibliothek mit dem Namen Linq to ObjectiveC erstellt, die eine Sammlung von Methoden darstellt, die diese Art von Problem sehr stark macht einfacher zu lösen. In Ihrem Fall benötigen Sie die Methode Linq-to-Objective :

%Vor%

Dies gibt eine Menge zurück, bei der jedes Element eine eigene Eigenschaft type hat.

    
ColinE 08.03.2013 20:16
quelle

Tags und Links