3 Stimmen

Wie man Objekte in einem NSArray an bestimmten Indizes zurückgeben?

Exemple :

Ich habe ein NSArray mit 40 Objekten. Was ist der effizienteste Weg, um NUR die Objekte zurückzugeben, deren Index gleich einer in einem anderen NSArray angegebenen Zahl ist (z. B. {0, 27, 36})?

Kann hier ein Prädikat verwendet werden? Oder gibt es einen einfacheren und effizienteren Ansatz?

3voto

Ben S Punkte 66945

Iterieren Sie doch einfach über das Index-Array und suchen Sie nach jedem Index im Daten-Array, indem Sie den Index durch das gesuchte Objekt ersetzen.

Am Ende enthält das Array, das die Indizes enthielt, nun die Objekte. Wenn Sie Ihr Index-Array nicht löschen wollen, erstellen Sie einfach ein neues Array mit der gleichen Größe wie das Index-Array und legen Sie die Objekte dort ab.

Möglicherweise machen Sie sich zu viele Gedanken über das Design und verfallen der Mikro-Optimierung. (Was eine schlechte Sache ist.)

3voto

e.James Punkte 112528

Es gibt eine Methode ( objectsAtIndexes ) für die Rückgabe von bestimmten Indizes aus einem ursprünglichen Array, aber es erfordert ein NSIndexSet als Argument, und es gibt keinen eingebauten Weg, um Ihr Array von Indizes in ein Indexset zu konvertieren. Auf der positiven Seite können Sie den Indexsatz mit einer kurzen Schleife wie folgt erzeugen:

NSMutableIndexSet indexes = [NSMutableIndexSet indexSet];
for (NSNumber * number in indexArray)
{
    [indexes addIndex:[number intValue]];
}
return [originalArray objectsAtIndexes:indexes];

Ist dies effizienter als einfach in einer Schleife durch das ursprüngliche Array? Ich habe keine Ahnung. Sie müssten ein Profil Ihrer Anwendung erstellen, um sicher zu sein.

0voto

regulus6633 Punkte 18355

Ich erinnere mich, einmal gelesen zu haben, und ich kann nicht sagen, wo, aber es ist mir im Gedächtnis geblieben, dass es einen effizienteren Weg gibt, wenn dies etwas ist, das man viele Male machen muss und das Feld ziemlich groß ist. Sie könnten ein neues Wörterbuch aus diesem Array erstellen, wo jeder Eintrag den Schlüssel der Indexnummer hat und der Wert ist das Array-Element. Das Wörterbuch wird nur einmal erstellt, so dass die harte Arbeit auf einen Schlag erledigt ist. Jedes Mal, wenn Sie dann auf Werte an bestimmten Indizes zugreifen müssen, fragen Sie einfach nach valueForKey:@"indexNumber". Aber ich hatte nie einen Bedarf dafür, also habe ich nie getestet, ob es auf lange Sicht effizienter ist... es ist nur ein Gedanke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X