Wie kann ich ein Element in Apples neuer Sprache Swift aus einem Array entfernen / entfernen?
Hier ist ein Code:
let animals = ["cats", "dogs", "chimps", "moose"]
Wie könnte das Element animals[2]
aus dem Array entfernt werden?
Das let
Schlüsselwort dient zum Deklarieren von Konstanten, die nicht geändert werden können. Wenn Sie eine Variable ändern möchten, sollten Sie var
stattdessen Folgendes verwenden: z.
var animals = ["cats", "dogs", "chimps", "moose"]
animals.remove(at: 2) //["cats", "dogs", "moose"]
Eine nicht mutierende Alternative, die die ursprüngliche Sammlung unverändert lässt, besteht filter
darin, eine neue Sammlung zu erstellen, ohne dass die Elemente entfernt werden sollen, z.
let pets = animals.filter { $0 != "chimps" }
remove
let animal = animals.remove(at: 2)
Gegeben
Entfernen Sie das erste Element
Letztes Element entfernen
Element am Index entfernen
Element mit unbekanntem Index entfernen
Für nur ein Element
Für mehrere Elemente
Anmerkungen
filter
und Stelle (mit Ausnahme von ) und geben das entfernte Element zurück.dropFirst
oderdropLast
erstellen.Auf Swift 5.2 aktualisiert
quelle
chimps && moose
zum Beispiel? Ich suche etwas anderes als{$0 != "chimps" && $0 != "moose"}
Die obigen Antworten scheinen davon auszugehen, dass Sie den Index des Elements kennen, das Sie löschen möchten.
Oft kennen Sie den Verweis auf das Objekt, das Sie im Array löschen möchten. (Sie haben Ihr Array durchlaufen und es gefunden, z. B.) In solchen Fällen ist es möglicherweise einfacher, direkt mit der Objektreferenz zu arbeiten, ohne auch überall ihren Index übergeben zu müssen. Daher schlage ich diese Lösung vor. Es verwendet den Identitätsoperator
!==
, mit dem Sie testen, ob zwei Objektreferenzen auf dieselbe Objektinstanz verweisen.Natürlich funktioniert das nicht nur für
String
s.quelle
list = list.filter({ $0 != element })
array.indexOf({ $0 == obj })
list
diese Löschung verweisen, werden die anderen Array-Referenzen nicht aktualisiert, da Sie ein neues Array zuweisenlist
. Nur eine subtile Implikation, wenn Sie mit diesem Ansatz aus Arrays löschen.Swift 5: Hier ist eine coole und einfache Erweiterung zum Entfernen von Elementen in einem Array ohne Filterung:
Verwendung :
Funktioniert auch mit anderen Typen, z. B.
Int
daElement
es sich um einen generischen Typ handelt:quelle
Für Swift4:
quelle
Ab Xcode 10+ und gemäß der WWDC 2018-Sitzung 223, "Embracing Algorithms", wird eine gute Methode für die Zukunft sein
mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
Apples Beispiel:
Siehe Apples Dokumentation
Im Beispiel des OP: Entfernen von Tieren [2], "Schimpansen":
Diese Methode kann bevorzugt werden, da sie gut skaliert (linear oder quadratisch), lesbar und sauber ist. Denken Sie daran, dass es nur in Xcode 10+ funktioniert und zum Zeitpunkt des Schreibens in der Beta.
quelle
Nur wenige Operationen beziehen sich auf das Array in Swift
Array erstellen
Objekt im Array hinzufügen
Wert vom Indexobjekt abrufen
Objekt anhängen
Objekt am Index einfügen
Objekt entfernen
Concat-Objektwert
quelle
Das könntest du machen. Stellen Sie zuerst sicher, dass
Dog
das Array wirklich vorhanden ist, und entfernen Sie es dann. Fügen Sie diefor
Anweisung hinzu, wenn Sie glaubenDog
, dass sie in Ihrem Array mehrmals vorkommt.Wenn Sie sicher sind, dass
Dog
das Array beendet wird und nur einmal passiert ist, tun Sie Folgendes:Wenn Sie beide haben, Zeichenfolgen und Zahlen
quelle
Wenn Sie den Index des Elements, das Sie entfernen möchten, nicht kennen und das Element dem Equatable-Protokoll entspricht, können Sie Folgendes tun:
animals.removeAtIndex(animals.indexOf("dogs")!)
Siehe Antwort auf ein gleichwertiges Protokoll: Wie mache ich indexOfObject oder ein richtiges includesObject
quelle
Entfernen Sie Elemente mithilfe des Indexarrays:
Array von Zeichenfolgen und Indizes
Array von Ganzzahlen und Indizes
Entfernen Sie Elemente mit dem Elementwert eines anderen Arrays
Arrays von ganzen Zahlen
Arrays von Strings
quelle
In Bezug auf @ Suragchs Alternative zu "Element eines unbekannten Index entfernen":
Es gibt eine leistungsfähigere Version von "indexOf (Element)", die mit einem Prädikat anstelle des Objekts selbst übereinstimmt. Es hat den gleichen Namen, wird aber von myObjects.indexOf {$ 0.property = valueToMatch} aufgerufen. Es gibt den Index des ersten übereinstimmenden Elements zurück, das im myObjects-Array gefunden wurde.
Wenn das Element ein Objekt / eine Struktur ist, möchten Sie dieses Element möglicherweise basierend auf einem Wert einer seiner Eigenschaften entfernen. Sie haben beispielsweise eine Autoklasse mit der Eigenschaft car.color und möchten das "rote" Auto aus Ihrem Autos entfernen.
Voraussichtlich können Sie dies überarbeiten, um "alle" roten Autos zu entfernen, indem Sie die obige if-Anweisung in eine Wiederholungs- / while-Schleife einbetten und einen else-Block anhängen, um ein Flag zu setzen, das aus der Schleife "ausbricht".
quelle
Swift 5
quelle
Wenn Sie über ein Array von benutzerdefinierten Objekten verfügen, können Sie nach bestimmten Eigenschaften wie folgt suchen:
oder wenn Sie zum Beispiel nach Namen suchen möchten
quelle
Dies sollte es tun (nicht getestet):
Bearbeiten: und Sie müssen es zu einem machen
var
, nicht zu einemlet
, sonst ist es eine unveränderliche Konstante.quelle
Ich habe die folgende Erweiterung entwickelt, die sich um das Entfernen von Elementen aus einem kümmert
Array
, vorausgesetzt, die Elemente imArray
GerätEquatable
:Verwendung:
quelle
Erweiterung zum Entfernen des String-Objekts
quelle
Ich benutze diese Erweiterung, fast die gleiche wie die von Varun, aber diese (unten) ist universell einsetzbar:
quelle
Zum Entfernen von Elementen aus einem Array, verwenden
remove(at:)
,removeLast()
undremoveAll()
.Entfernen Sie den Wert an Position 2
Entfernen Sie den letzten Wert aus dem Array
Entfernt alle Mitglieder aus dem Set
quelle