Hole NSIndexSet von NSArray

7

NSArray verfügt über nützliche Methoden, um Objekte für bestimmte Indizes zu finden

%Vor%

Ich möchte jedoch NSIndexSet (mehrere Indizes) für gegebene Objekte erhalten. Etwas wie:

%Vor%

Diese Methode existiert nicht für NSArray . Fehle ich etwas? Kennt jemand eine andere Standardmethode? Ansonsten muss ich dies als Kategoriemethode schreiben.

    
cocoafan 25.05.2009, 08:09
quelle

3 Antworten

6

Es könnte nützlich sein, es mithilfe eines Sets zu implementieren, um die Objekte zu bestimmen, die gefunden werden sollen, wie zum Beispiel:

%Vor%

Dies erfordert, dass jedes Objekt in dem Array besucht wird, aber es tut dies zumindest einmal und verwendet dabei eine schnelle Aufzählung. Die Verwendung eines NSSet und das Testen jedes Objekts im Array gegen diese Menge ist auch viel schneller als das Testen für die Aufnahme in ein Array.

Es gibt hier eine mögliche Optimierung, die jedoch in dem Fall, in dem ein einzelnes Objekt mehrfach im empfangenden Array gespeichert wird, unterbrochen wird:

%Vor%

Wenn Sie also ein Array mit 20'000 Objekten für zwei Objekte scannen und beide innerhalb der ersten zehn liegen, können Sie die anderen 19'990 Objekte im Array nicht scannen. Wie gesagt, das hilft nicht, wenn das Array Duplikate enthält, weil es stoppt, sobald es 2 Indizes gefunden hat (auch wenn beide auf das gleiche Objekt zeigen).

Nachdem ich das gesagt habe stimme ich Mikes Kommentar oben zu. Die Chancen stehen gut, dass Sie sich für etwas Schmerz zur Optimierungszeit bereit machen. Es kann sich lohnen, über verschiedene Datentypen nachzudenken; Zum Beispiel, während NSArray die logischste Wahl für einen einfachen, flachen Container ist, ist es besser, stattdessen einen NSSet zu verwenden, wenn Sie die Bestellinformationen nicht benötigen; Dies hat den zusätzlichen Vorteil, dass das selbe Objekt (berechnet mit -isEqual: ) nicht zweimal gespeichert wird. Wenn Sie die Duplikate verfolgen möchten, aber keine Sortierung benötigen, können Sie NSCountedSet verwenden, das sich wie NSSet verhält, außer dass es verfolgt, wie oft jedes Objekt hinzugefügt oder entfernt wurde, ohne Duplikate zu speichern.

    
Jim Dovey 31.05.2009, 14:37
quelle
13

Neuere NSArray-Versionen (OSX 10.6 und iOS 4) bieten die Methode indexesOfObjectsPassingTest: .

%Vor%     
Oliver Schönherr 06.02.2013 16:00
quelle
1

Sie müssen Ihre eigene Kategorie implementieren, soweit ich das sehen kann.

    
Georg Schölly 25.05.2009 08:15
quelle

Tags und Links