Arrays sind einer von Swifts drei primären Sammlungstypen. Ein Array ist eine geordnete Liste von Elementen. Arrays können Elemente jedes Typs speichern, aber alle Elemente in einem bestimmten Array müssen denselben Typ haben. Wenn ein Array einer Variablen zugewiesen wird, ist es veränderbar: Du kannst nach dem Erstellen Elemente hinzufügen, entfernen oder ändern. Wird es einer Konstanten zugewiesen, ist es unveränderbar, sein Inhalt kann also nicht geändert werden.
Array-Literale schreibst du als kommagetrennte Liste von Elementen in eckigen Klammern ([...]).
Swift kann den Typ des Arrays aus den Elementen im Literal ableiten.
let evenInts = [2, 4, 6, 8, 10, 12]
var oddInts = [1, 3, 5, 7, 9, 11, 13]
let greetings = ["Hello!", "Hi!", "¡Hola!"]
Du kannst den Typ auch explizit angeben.
Array-Typen kannst du auf zwei Arten schreiben: Array<T> oder mit der Kurzschreibweise [T], wobei T der Typ der Werte ist, die das Array enthält.
let evenInts: Array<Int> = [2, 4, 6, 8, 10, 12]
var oddInts: [Int] = [1, 3, 5, 7, 9, 11, 13]
let greetings: [String] = ["Hello!", "Hi!", "¡Hola!"]
Die Anzahl der Elemente in einem Array ermittelst du über seine count-Eigenschaft:
evenInts.count
// returns 6
Um ein leeres Array zu erstellen, musst du seinen Typ angeben. Das geht mit der Syntax des Array-Initialisierers oder mit einer expliziten Typannotation:
let emptyArray = [Int]()
let emptyArray2 = Array<Int>()
let emptyArray3: [Int] = []
Arrays lassen sich verschachteln, um mehrdimensionale Arrays zu erstellen.
Wenn du den Typ eines verschachtelten Arrays explizit angibst, setzt du den Elementtyp in verschachtelte eckige Klammern, zum Beispiel [[Int]] oder Array<Array<Int>>:
let multiDimArray = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let multiDimArray2: [[Int]] = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Mit der Methode append(_:) hängst du ein Element an das Ende eines veränderbaren Arrays an:
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.append(15)
// oddInts is now [1, 3, 5, 7, 9, 11, 13, 15]
Mit der Methode insert(_:at:) fügst du ein Element an einer bestimmten Position ein.
Diese Methode nimmt zwei Argumente: das einzufügende Element und den Index, an dem es eingefügt wird.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.insert(0, at: 0)
// oddInts is now [0, 1, 3, 5, 7, 9, 11, 13]
Mit dem Operator + kannst du zwei Arrays zu einem einzigen Array zusammenfügen.
Der Operator + erstellt ein neues Array und gibt es zurück; die ursprünglichen Arrays werden nicht verändert.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
let combined = oddInts + [15, 17, 19]
// combined is [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
print(oddInts)
// prints [1, 3, 5, 7, 9, 11, 13]
Auf ein einzelnes Element eines Arrays greifst du zu, indem du seinen Index in eckigen Klammern ([]) hinter den Namen des Arrays setzt.
Array-Indizes sind nullbasierte Int-Werte und beginnen beim ersten Element bei 0.
Ein Zugriff auf einen Index außerhalb des gültigen Bereichs führt zu einem Laufzeitfehler und bringt das Programm zum Absturz.
let evenInts = [2, 4, 6, 8, 10, 12]
let oddInts = [1, 3, 5, 7, 9, 11, 13]
evenInts[2]
// returns 6
oddInts[7]
// Fatal error: Index out of range
Ein Element in einem veränderbaren Array änderst du, indem du einem bestimmten Index einen neuen Wert zuweist. Wie beim Lesen von Elementen führt auch hier ein Index außerhalb des gültigen Bereichs zu einem Laufzeitfehler.
var evenInts = [2, 4, 6, 8, 10, 12]
evenInts[2] = 0
// evenInts is now [2, 4, 0, 8, 10, 12]
Mit der Methode joined(separator:) fügst du ein Array von Strings zu einem einzigen String zusammen. Sie erwartet einen String als Trennzeichen:
let evenInts = ["2", "4", "6", "8", "10", "12"]
let evenIntsString = evenInts.joined(separator: ", ")
// returns "2, 4, 6, 8, 10, 12"
Mit der Methode split(separator:) zerlegst du einen String in ein Array aus Teilstrings, indem du das Trennzeichen übergibst:
let evenIntsString = "2, 4, 6, 8, 10, 12"
let evenInts = evenIntsString.split(separator: ",")
// returns ["2", " 4", " 6", " 8", " 10", " 12"]
Mit der Methode remove(at:) entfernst du ein Element an einem bestimmten Index.
Der Index muss innerhalb der gültigen Grenzen des Arrays liegen, sonst tritt ein Laufzeitfehler auf.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.remove(at: 3)
// oddInts is now [1, 3, 5, 9, 11, 13]
Um das letzte Element eines Arrays zu entfernen, verwendest du die Methode removeLast().
Ein Aufruf von removeLast() auf einem leeren Array führt zu einem Laufzeitfehler.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.removeLast()
// oddInts is now [1, 3, 5, 7, 9, 11]
Als angehende Magierin muss Elyse noch ein paar Grundlagen üben. Sie hat einen Stapel Karten, den sie manipulieren möchte.
Um es sich etwas einfacher zu machen, benutzt sie nur die Karten 1 bis 10, sodass sich ihr Kartenstapel durch ein Array von Zahlen darstellen lässt. Die Position einer bestimmten Karte entspricht dem Index im Array. Das heißt, Position 0 verweist auf die erste Karte, Position 1 auf die zweite Karte und so weiter.
Alle Funktionen sollen das Array der Karten aktualisieren und dann das geänderte Array zurückgeben. Diese weit verbreitete Arbeitsweise ist als Builder-Pattern bekannt und erlaubt es dir, Funktionen ganz elegant aneinanderzureihen.
Um eine Karte auszuwählen, gib die Karte am Index position aus dem gegebenen Stapel zurück.
Implementiere die Funktion getCard(at:from:), die zwei Argumente entgegennimmt: at ist die Position der Karte im Stapel und from ist der Kartenstapel.
Die Funktion soll die Karte an der Position index aus dem gegebenen Stapel zurückgeben.
let index = 2
getCard(at: index, from: [1, 2, 4, 1])
// returns 4
Zaubere ein bisschen und tausche die Karte am Index position gegen die angegebene Ersatzkarte aus.
Implementiere die Funktion setCard(at:in:to), die drei Argumente entgegennimmt: at ist die Position der Karte im Stapel, in ist der Kartenstapel und to ist die neue Karte, die die Karte an der Position index ersetzen soll.
Die Funktion soll eine Kopie des Stapels zurückgeben, bei der die Karte an der Position index durch die neue Karte ersetzt wurde.
Wenn der angegebene index kein gültiger Index im Stapel ist, soll der ursprüngliche Stapel unverändert zurückgegeben werden.
let index = 2
let newCard = 6
setCard(at: index, in: [1, 2, 4, 1], to: newCard)
// returns [1, 2, 6, 1]
Lass eine Karte erscheinen, indem du eine neue Karte oben auf den Stapel legst.
Implementiere die Funktion insert(_:atTopOf:), die zwei Argumente entgegennimmt: die neue Karte, die eingefügt werden soll, und den Kartenstapel.
Die Funktion soll eine Kopie des Stapels zurückgeben, bei der die neue Karte oben auf den Stapel gelegt wurde.
let newCard = 8
insert(newCard, atTopOf: [5, 9, 7, 1])
// returns [5, 9, 7, 1, 8]
Lass eine Karte verschwinden, indem du die Karte an der angegebenen position aus dem Stapel entfernst.
Implementiere die Funktion removeCard(at:from:), die zwei Argumente entgegennimmt: at ist die Position der Karte im Stapel und from ist der Kartenstapel.
Die Funktion soll eine Kopie des Stapels zurückgeben, bei der die Karte an der Position index entfernt wurde.
Wenn der angegebene index kein gültiger Index im Stapel ist, soll der ursprüngliche Stapel unverändert zurückgegeben werden.
let index = 2
removeCard(at: index, from: [3, 2, 6, 4, 8])
// returns [3, 2, 4, 8]
Lass eine Karte erscheinen, indem du eine neue Karte an der angegebenen position in den Stapel einfügst.
Implementiere die Funktion insert(_:at:from:), die drei Argumente entgegennimmt: die neue Karte, die eingefügt werden soll, die Position, an der die neue Karte eingefügt werden soll, und den Kartenstapel.
Die Funktion soll eine Kopie des Stapels zurückgeben, bei der die neue Karte an der angegebenen Position hinzugefügt wurde.
Wenn der angegebene index kein gültiger Index im Stapel ist, soll der ursprüngliche Stapel unverändert zurückgegeben werden.
let newCard = 8
insert(newCard, at: 2, from: [5, 9, 7, 1])
// returns [5, 9, 8, 7, 1]
Prüfe, ob die Größe des Stapels gleich stackSize ist oder nicht.
Implementiere die Funktion checkSizeOfStack(_:_:), die zwei Argumente entgegennimmt: stack ist der Kartenstapel und stackSize ist die Größe des Stapels.
Die Funktion soll true zurückgeben, wenn die Größe des Stapels gleich stackSize ist, und sonst false.
let stackSize = 4
checkSizeOfStack([3, 2, 6, 4, 8], stackSize)
// returns false
Melde dich bei Exercism an, um Swift mit 35 Konzepte116 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.