Anstatt eine Liste der zu entfernenden Indizes zu haben, kann es einfacher sein, eine Liste von zu speichernden Indizes zu haben, die Sie mit dem Set
-Typ machen können:
Dann können Sie mit PermutationGenerator
ein neues Array nur dieser Indizes erstellen:
Beachte, dass PermutationGenerator
in Swift 3 weggeht und auch die Reihenfolge nicht gleich hält, obwohl es vielleicht zu einem Zeitpunkt passiert ist. Die Verwendung der akzeptierten Antwort ergibt [2, 6, 0, 3]
, was möglicherweise unerwartet ist. Ein paar alternative Ansätze, die das erwartete Ergebnis von [0, 2, 3, 6]
ergeben, sind:
oder
%Vor%Ich habe ein Array und ich möchte eine Reihe von Indizes entfernen
%Vor%Was ist der beste Weg, Indizes 1,4,5 von arr zu entfernen?
Beachte, dass %code% in Swift 3 weggeht und auch die Reihenfolge nicht gleich hält, obwohl es vielleicht zu einem Zeitpunkt passiert ist. Die Verwendung der akzeptierten Antwort ergibt %code% , was möglicherweise unerwartet ist. Ein paar alternative Ansätze, die das erwartete Ergebnis von %code% ergeben, sind:
%Vor%oder
%Vor%Für Swift 3
%Vor%Wenn Sie sehr schnell eine Ausgabe erstellen möchten, können Sie
verwenden %Vor%Aber es wird die Reihenfolge Ihres Arrays ändern
Elemente mithilfe des Indexarrays entfernen:
Array von Strings und Indizes
%Vor%Array von Ganzzahlen und Indizes
%Vor%
Entfernen Sie Elemente mit Elementwert eines anderen Arrays
Arrays von ganzen Zahlen
%Vor%Arrays von Strings
%Vor%Das Problem mit Flatmap ist, dass es falsche Ergebnisse liefert, wenn Ihr Array Optionals enthält.
Das Folgende ist viel schneller als die funktionalen Stillösungen und arbeitet mit Optionals. Sie müssen nur sicherstellen, dass %code% sortiert und eindeutig ist. Es ist auch ziemlich sprachunabhängig.
%Vor%Wenn Sie sicherstellen müssen, dass %code% sortiert und eindeutig ist:
%Vor%Verwenden von XCTest zum Entfernen von 500 Elementen (einschließlich der Operation zur Sicherstellung der Eindeutigkeit und Sortierung):
0,006 Sekunden
vs.
%code% :
0,206 Sekunden
Ich verwende das als Erweiterung für Array
%Vor%Anstatt eine Liste der zu entfernenden Indizes zu haben, kann es einfacher sein, eine Liste von zu speichernden Indizes zu haben, die Sie mit dem %code% -Typ machen können:
%Vor%Dann können Sie mit %code% ein neues Array nur dieser Indizes erstellen:
%Vor%Das Problem mit Flatmap ist, dass es falsche Ergebnisse liefert, wenn Ihr Array Optionals enthält.
Das Folgende ist viel schneller als die funktionalen Stillösungen und arbeitet mit Optionals. Sie müssen nur sicherstellen, dass rmIndices
sortiert und eindeutig ist. Es ist auch ziemlich sprachunabhängig.
Wenn Sie sicherstellen müssen, dass rmIndices
sortiert und eindeutig ist:
Verwenden von XCTest zum Entfernen von 500 Elementen (einschließlich der Operation zur Sicherstellung der Eindeutigkeit und Sortierung):
0,006 Sekunden
vs.
arr.enumerated().filter({ !rmIndices.contains(%code%.0) }).map { %code%.1 }
:
0,206 Sekunden
Ich verwende das als Erweiterung für Array
%Vor%Tags und Links swift