Entfernen Sie mehrere Indizes aus dem Array in Swift

8

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?

    
rosewater 28.04.2015, 03:38
quelle

6 Antworten

8

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:

%Vor%

Dann können Sie mit PermutationGenerator ein neues Array nur dieser Indizes erstellen:

%Vor%     
Airspeed Velocity 28.04.2015, 03:55
quelle
18

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:

%Vor%

oder

%Vor%     
Casey Fleser 04.05.2016 14:48
quelle
5
___ qstntxt ___

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?

    
___ answer37031173 ___

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%     
___ answer43906083 ___

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

    
___ answer45141642 ___

Elemente mithilfe des Indexarrays entfernen:

  1. Array von Strings und Indizes

    %Vor%
  2. Array von Ganzzahlen und Indizes

    %Vor%



Entfernen Sie Elemente mit Elementwert eines anderen Arrays

  1. Arrays von ganzen Zahlen

    %Vor%
  2. Arrays von Strings

    %Vor%
___ answer45419773 ___

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%     
___ tag123swift ___ Swift ist eine universelle Open-Source-Programmiersprache, die von Apple Inc. für ihre Plattformen und Linux entwickelt wurde. Verwenden Sie das Tag nur für Fragen zu Sprachfunktionen oder für Code in Swift. Verwenden Sie die Tags [ios], [osx], [watch-os], [tvos], [cocoa-touch] und [cocoa] für (sprachunabhängige) Fragen zu den Plattformen oder Frameworks. ___ answer29910021 ___

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%     
___ qstnhdr ___ Entfernen Sie mehrere Indizes aus dem Array in Swift ___
Vatsal Manot 28.04.2015 03:55
quelle
1

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

    
Foolish 11.05.2017 03:34
quelle
1

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.

%Vor%

Wenn Sie sicherstellen müssen, dass rmIndices 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.

arr.enumerated().filter({ !rmIndices.contains(%code%.0) }).map { %code%.1 } :

0,206 Sekunden

Ich verwende das als Erweiterung für Array

%Vor%     
MH175 31.07.2017 15:25
quelle
0

Elemente mithilfe des Indexarrays entfernen:

  1. Array von Strings und Indizes

    %Vor%
  2. Array von Ganzzahlen und Indizes

    %Vor%



Entfernen Sie Elemente mit Elementwert eines anderen Arrays

  1. Arrays von ganzen Zahlen

    %Vor%
  2. Arrays von Strings

    %Vor%
Krunal 17.07.2017 10:20
quelle

Tags und Links