A tömbök a Swift három fő gyűjteménytípusának egyike. A tömb elemek sorrendbe rendezett listája. A tömbök bármilyen típusú elemet tárolhatnak, egy adott tömbben viszont minden elemnek ugyanolyan típusúnak kell lennie. A tömbök módosíthatók, ha változóhoz rendeljük őket, ami azt jelenti, hogy a tömb létrehozása után hozzáadhatsz, eltávolíthatsz vagy módosíthatsz elemeket. Ha konstanshoz rendeljük, a tömb nem módosítható, ami azt jelenti, hogy a tartalma nem változtatható meg.
A tömbliterálokat vesszővel elválasztott elemek listájaként írjuk le, szögletes zárójelek ([...]) közé zárva.
A Swift a literál elemeiből következtethet a tömb típusára.
let evenInts = [2, 4, 6, 8, 10, 12]
var oddInts = [1, 3, 5, 7, 9, 11, 13]
let greetings = ["Hello!", "Hi!", "¡Hola!"]
A típust explicit módon is megadhatod.
A tömbök típusát kétféleképpen írhatjuk le: Array<T> vagy a rövidített [T] szintaxissal, ahol a T a tömb által tartalmazott értékek típusa.
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!"]
A tömb elemeinek számát a count tulajdonságával határozhatod meg:
evenInts.count
// returns 6
Üres tömb létrehozásához meg kell adnod a típusát. Ezt megteheted a tömb kezdőérték-szintaxisával vagy egy explicit típusmegjelöléssel:
let emptyArray = [Int]()
let emptyArray2 = Array<Int>()
let emptyArray3: [Int] = []
A tömbök egymásba ágyazhatók, így többdimenziós tömböket hozhatsz létre.
Amikor egy egymásba ágyazott tömb típusát explicit módon adod meg, az elemtípust beágyazott zárójelekbe zárd, például [[Int]] vagy 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]]
Egy módosítható tömb végéhez az append(_:) metódussal adhatsz hozzá elemet:
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.append(15)
// oddInts is now [1, 3, 5, 7, 9, 11, 13, 15]
Egy elemet egy adott indexre az insert(_:at:) metódussal szúrhatsz be.
Ez a metódus két argumentumot vár: a beszúrandó elemet és az indexet, ahová be kell szúrni.
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]
Két tömböt a + operátorral fűzhetsz össze egyetlen tömbbé.
A + operátor új tömböt hoz létre és ad vissza; nem módosítja az eredeti tömböket.
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]
Egy tömb egyes elemeit úgy érheted el, hogy az indexét a tömb neve után szögletes zárójelbe ([]) írod.
A tömb indexei nullától induló Int értékek, az első elemnél 0-tól kezdődnek.
Ha az érvényes tartományon kívüli indexet érsz el, futásidejű hiba történik, és a program összeomlik.
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
Egy módosítható tömb elemét úgy változtathatod meg, hogy új értéket adsz egy adott indexnek. Az elemek olvasásához hasonlóan az érvényes tartományon kívüli index használata futásidejű hibát okoz.
var evenInts = [2, 4, 6, 8, 10, 12]
evenInts[2] = 0
// evenInts is now [2, 4, 0, 8, 10, 12]
Stringekből álló tömböt egyetlen stringgé fűzhetsz össze a joined(separator:) metódussal, amely egy elválasztó stringet vár:
let evenInts = ["2", "4", "6", "8", "10", "12"]
let evenIntsString = evenInts.joined(separator: ", ")
// returns "2, 4, 6, 8, 10, 12"
Egy stringet a split(separator:) metódussal bonthatsz fel részstringek tömbjére, átadva az elválasztó karaktert:
let evenIntsString = "2, 4, 6, 8, 10, 12"
let evenInts = evenIntsString.split(separator: ",")
// returns ["2", " 4", " 6", " 8", " 10", " 12"]
Egy elemet egy adott indexről a remove(at:) metódussal távolíthatsz el.
Az indexnek a tömb érvényes tartományán belül kell lennie, különben futásidejű hiba történik.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.remove(at: 3)
// oddInts is now [1, 3, 5, 9, 11, 13]
Egy tömb utolsó elemének eltávolításához a removeLast() metódust használd.
Ha üres tömbön hívod meg a removeLast() metódust, futásidejű hiba történik.
var oddInts = [1, 3, 5, 7, 9, 11, 13]
oddInts.removeLast()
// oddInts is now [1, 3, 5, 7, 9, 11]
Varázslótanoncként Elyse-nek gyakorolnia kell néhány alapvető dolgot. Van egy kártyapaklija, amit manipulálni szeretne.
Hogy egy kicsit könnyebb legyen, csak az 1-től 10-ig terjedő kártyákat használja, így a kártyapaklija számok tömbjeként ábrázolható. Egy adott kártya pozíciója a tömbben lévő indexnek felel meg. Ez azt jelenti, hogy a 0. pozíció az első kártyára utal, az 1. pozíció a másodikra, és így tovább.
Minden függvénynek frissítenie kell a kártyák tömbjét, majd vissza kell adnia a módosított tömböt. Ez egy gyakori munkamódszer, amely Builder-minta néven ismert, és lehetővé teszi, hogy a függvényeket szépen egymásba fűzd.
Egy kártya kiválasztásához add vissza az adott pakli position indexén lévő kártyát.
Valósítsd meg a getCard(at:from:) függvényt, amely két argumentumot vár: at, amely a kártya pozíciója a pakliban, és from, amely a kártyák paklija.
A függvénynek vissza kell adnia az adott pakli index pozícióján lévő kártyát.
let index = 2
getCard(at: index, from: [1, 2, 4, 1])
// returns 4
Végezz egy kis bűvészmutatványt, és cseréld ki a position indexen lévő kártyát a megadott cserekártyára.
Valósítsd meg a setCard(at:in:to) függvényt, amely három argumentumot vár: at, amely a kártya pozíciója a pakliban, in, amely a kártyák paklija, és to, amely az új kártya, amely lecseréli az index pozícióban lévő kártyát.
A függvénynek vissza kell adnia a pakli egy másolatát, amelyben az index pozícióban lévő kártya az új kártyára van cserélve.
Ha a megadott index nem érvényes index a pakliban, az eredeti paklit kell visszaadni, változatlanul.
let index = 2
let newCard = 6
setCard(at: index, in: [1, 2, 4, 1], to: newCard)
// returns [1, 2, 6, 1]
Varázsolj elő egy kártyát úgy, hogy egy új kártyát szúrsz be a pakli tetejére.
Valósítsd meg az insert(_:atTopOf:) függvényt, amely két argumentumot vár: a beszúrandó új kártyát és a kártyák pakliját.
A függvénynek vissza kell adnia a pakli egy másolatát, amelyben a megadott új kártya a pakli tetejére került.
let newCard = 8
insert(newCard, atTopOf: [5, 9, 7, 1])
// returns [5, 9, 7, 1, 8]
Tüntess el egy kártyát úgy, hogy eltávolítod az adott position pozícióban lévő kártyát a pakliból.
Valósítsd meg a removeCard(at:from:) függvényt, amely két argumentumot vár: at, amely a kártya pozíciója a pakliban, és from, amely a kártyák paklija.
A függvénynek vissza kell adnia a pakli egy másolatát, amelyből az index pozícióban lévő kártya el van távolítva.
Ha a megadott index nem érvényes index a pakliban, az eredeti paklit kell visszaadni, változatlanul.
let index = 2
removeCard(at: index, from: [3, 2, 6, 4, 8])
// returns [3, 2, 4, 8]
Varázsolj elő egy kártyát úgy, hogy egy új kártyát szúrsz be a pakli adott position pozíciójába.
Valósítsd meg az insert(_:at:from:) függvényt, amely három argumentumot vár: a beszúrandó új kártyát, a pozíciót, ahová az új kártyát be kell szúrni, és a kártyák pakliját.
A függvénynek vissza kell adnia a pakli egy másolatát, amelyben a megadott új kártya az adott pozícióra került.
Ha a megadott index nem érvényes index a pakliban, az eredeti paklit kell visszaadni, változatlanul.
let newCard = 8
insert(newCard, at: 2, from: [5, 9, 7, 1])
// returns [5, 9, 8, 7, 1]
Ellenőrizd, hogy a pakli mérete megegyezik-e a stackSize értékkel vagy sem.
Valósítsd meg a checkSizeOfStack(_:_:) függvényt, amely két argumentumot vár: stack, amely a kártyák paklija, és stackSize, amely a pakli mérete.
A függvénynek true értéket kell visszaadnia, ha a pakli mérete megegyezik a stackSize értékkel, és false értéket egyébként.
let stackSize = 4
checkSizeOfStack([3, 2, 6, 4, 8], stackSize)
// returns false
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Swift nyelvet 35 fogalom116 feladat segítségével, valódi emberi mentorálással, mindez ingyen.