Ako je štruktúrovaný slovník v Swift?
sobes.tech AI
Odpoveď od AI
Slovník (Dictionary) v Swift predstavuje kolekciu neusporiadaných dvojíc "kľúč-hodnota".
Hlavné vlastnosti:
- Neusporiadanosť: Poradie prvkov nie je garantované.
- Unikátne kľúče: Každý kľúč v slovníku musí byť unikátny.
- Hashovateľné kľúče: Typ kľúča musí byť hashovateľný (t.j., zodpovedať protokolu
Hashable). Typy akoString,Int,Double,Boola väčšina štruktúr sú hashovateľné predvolene. - Typovanie: Slovník je prísne typovaný, ako po kľúčoch, tak aj po hodnotách.
- Uloženie: Implementovaný je na základe hash tabuľky, čo zabezpečuje vysokú efektívnosť operácií vkladania, odstraňovania a prístupu podľa kľúča (v priemere O(1)).
Vytvorenie slovníka:
// Prázdny slovník
var emptyDictionary: [String: Int] = [:]
// Slovník s počiatočnými hodnotami
let cities: [String: String] = [
"London": "UK",
"Paris": "France",
"Tokyo": "Japan"
]
Prístup a modifikácia:
// Prístup podľa kľúča (vracia Optional)
let country = cities["Paris"] // Optional("France")
// Pridanie alebo aktualizácia hodnoty
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Pridanie
scores["Alice"] = 105 // Aktualizácia
// Odstránenie hodnoty
scores["Bob"] = nil // Odstránenie prvku s kľúčom "Bob"
Iterácia:
for (city, country) in cities {
print("\(city) je v \(country)")
}
for city in cities.keys {
print("Mesto: \(city)")
}
for country in cities.values {
print("Krajina: \(country)")
}
Vnútorná štruktúra (všeobecne):
Swift používa modifikovanú implementáciu hash tabuľky. Pri vkladaní dvojice "kľúč-hodnota":
- Vypočíta sa hash hodnota kľúča.
- Hash hodnota sa použije na určenie "košíka" (bucket), do ktorého má byť prvok umiestnený.
- Ak v košíku už existujú prvky, používa sa mechanizmus riešenia kolízií (napríklad reťazenie alebo otvorená adresácia) na nájdenie vhodného miesta.
Výkonnosť väčšiny operácií (vkladanie, odstraňovanie, prístup) je blízka O(1) pri rovnomernom rozložení hashov a malom počte kolízií. V najhoršom prípade (keď všetky hash hodnoty padnú do jedného košíka) môže výkon klesnúť na O(n), ale to je zriedkavé pre dobré hash funkcie a dostatočnú veľkosť hash tabuľky. Pri zvyšovaní počtu prvkov môže slovník vykonať prehashovanie (rehashing), zväčšiť veľkosť vnútornej štruktúry na udržanie efektívnosti, čo môže byť relatívne náročná operácia.