Einleitung: Warum „Index finden“ eine Grundlage ist, die man auswendig kennen sollte
\n\nStellen Sie sich vor: Sie schreiben eine iOS-App. Sie haben ein Array mit Aufgaben, und der Benutzer möchte eine bestimmte Aufgabe anhand ihres Namens löschen. Oder vielleicht suchen Sie die Position eines Elements, um es in der Liste zu aktualisieren. In beiden Fällen benötigen Sie dasselbe – den Index eines Elements in einem Swift-Array finden. Diese Aufgabe ist so beliebt, dass die Frage auf Stack Overflow tausende Aufrufe erhalten hat. Und das ist kein Zufall: Die Indexsuche ist eines der häufigsten Szenarien in der täglichen Entwicklung.
\n\nIn diesem Tutorial werden wir alle Methoden durchgehen, um den Index eines Elements in Swift zu finden: von einfachem firstIndex(of:) bis hin zur fortgeschrittenen Suche mit Closures. Sie erfahren, wie Sie mit Arrays von Strings, Zahlen und benutzerdefinierten Objekten arbeiten. Los geht's!
1. Vorbereitung: Was ist ein Index in einem Swift-Array?
\n\nBevor wir in den Code springen, erinnern wir uns an die Grundlagen. Ein Array in Swift ist eine geordnete Sammlung von Elementen. Jedes Element hat seinen Index – eine ganze Zahl, beginnend mit 0. Das erste Element hat den Index 0, das zweite den Index 1 und so weiter.
\n\nlet fruits = ["🍎 Apfel", "🍌 Banane", "🍒 Kirsche"]\n// Indizes: 0 1 2\n\n\nWenn wir sagen „den Index eines Elements finden“, meinen wir: „Gib mir die Positionsnummer zurück, an der sich dieses Element befindet“. In Swift gibt es dafür mehrere elegante Methoden. Lassen Sie uns sie der Reihe nach durchgehen.
\n\n2. Die klassische Methode: firstIndex(of:) – der einfachste Weg
\n\nSeit Swift 4.2 ist die Methode firstIndex(of:) der Standardweg, um den Index eines Elements zu finden. Sie gibt einen optionalen Wert Int? zurück – wenn das Element gefunden wird, erhalten Sie den Index; wenn nicht – nil.
Beispiel mit einem String-Array
\n\nlet fruits = ["Apfel", "Banane", "Kirsche", "Dattel"]\n\nif let index = fruits.firstIndex(of: "Kirsche") {\n print("Index von 'Kirsche': \\(index)") // Gibt aus: 2\n} else {\n print("Element nicht gefunden")\n}\n\n\nBeachten Sie: firstIndex(of:) sucht nach dem ersten Vorkommen. Wenn es Duplikate im Array gibt, wird nur der erste Index zurückgegeben.
Beispiel mit einem Zahlen-Array
\n\nlet numbers = [10, 20, 30, 40, 50]\n\nif let position = numbers.firstIndex(of: 30) {\n print("Die Zahl 30 befindet sich an Position \\(position)") // 2\n}\n\n\nWichtig: Diese Methode funktioniert nur mit Typen, die dem Protokoll Equatable entsprechen. Alle Standardtypen (Int, String, Double, Bool) entsprechen ihm bereits.
3. Suche nach Bedingung: index(where:) – Flexibilität ohne Grenzen
\n\nWas aber, wenn Sie den Index nicht nach einem genauen Wert, sondern nach einer Bedingung suchen müssen? Zum Beispiel das erste Element finden, das größer als 25 ist, oder einen String, der mit einem bestimmten Buchstaben beginnt. Dafür gibt es die Methode firstIndex(where:) (früher index(where:)).
Syntax mit Closure
\n\nlet scores = [15, 22, 37, 41, 19]\n\nif let index = scores.firstIndex(where: { $0 > 25 }) {\n print("Das erste Element größer als 25 befindet sich am Index \\(index)") // 2 (Wert 37)\n}\n\n\nSuche nach einer Objekteigenschaft
\n\nAngenommen, Sie haben ein Array mit benutzerdefinierten Strukturen:
\n\nstruct User {\n let name: String\n let age: Int\n}\n\nlet users = [\n User(name: "Anna", age: 25),\n User(name: "Boris", age: 30),\n User(name: "Viktor", age: 22)\n]\n\n// Finden wir den Index des Benutzers mit dem Namen "Boris"\nif let index = users.firstIndex(where: { $0.name == "Boris" }) {\n print("Boris befindet sich am Index \\(index)") // 1\n}\n\n\nDieser Ansatz ist unglaublich leistungsfähig. Sie können jede beliebige logische Bedingung verwenden: mehrere Eigenschaften prüfen, reguläre Ausdrücke nutzen oder sogar Funktionen innerhalb der Closure aufrufen.
\n\n4. Arbeiten mit Duplikaten: Wie man alle Indizes findet
\n\nM