Cum este structurat un dicționar în Swift?
sobes.tech AI
Răspuns de la AI
Dicționarul (Dictionary) în Swift reprezintă o colecție de perechi de tip "cheie-valoare" neordonată.
Caracteristici principale:
- Neordonat: Ordinea elementelor nu este garantată.
- Chei unice: Fiecare cheie din dicționar trebuie să fie unică.
- Chei hashabile: Tipul cheii trebuie să fie hashabil (adică, să respecte protocolul
Hashable). Tipuri precumString,Int,Double,Boolși majoritatea structurilor sunt hashabile implicit. - Tipizare: Dicționarul este strict tipizat, atât pentru chei, cât și pentru valori.
- Stocare: Implementat pe baza unui tabel hash, ceea ce asigură o eficiență ridicată pentru operațiile de inserare, ștergere și acces pe bază de cheie (în medie O(1)).
Crearea dicționarelor:
// Dicționar gol
var emptyDictionary: [String: Int] = [:]
// Dicționar cu valori inițiale
let cities: [String: String] = [
"London": "UK",
"Paris": "France",
"Tokyo": "Japan"
]
Acces și modificare:
// Acces pe bază de cheie (returnează un Optional)
let country = cities["Paris"] // Optional("France")
// Adăugare sau actualizare valoare
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Adăugare
scores["Alice"] = 105 // Actualizare
// Ștergere valoare
scores["Bob"] = nil // Ștergere element cu cheia "Bob"
Iterare:
for (city, country) in cities {
print("\(city) se află în \(country)")
}
for city in cities.keys {
print("Oraș: \(city)")
}
for country in cities.values {
print("Țară: \(country)")
}
Structura internă (în general):
Swift utilizează o implementare modificată a unei tabele hash. La inserarea unui cuplu "cheie-valoare":
- Se calculează valoarea hash a cheii.
- Valoarea hash este folosită pentru a determina "coșul" (bucket) în care trebuie plasat elementul.
- Dacă în coș există deja elemente, se folosește un mecanism de rezolvare a coliziunilor (de exemplu, lanțuri sau adresare deschisă) pentru a găsi un loc potrivit.
Performanța majorității operațiilor (inserare, ștergere, acces) este aproape de O(1) atunci când hash-urile sunt distribuite uniform și există puține coliziuni. În cel mai rău caz (toate hash-urile cad într-un singur coș), performanța poate scădea la O(n), dar acest lucru este rar cu funcții hash bune și dimensiuni suficiente ale tabelului hash. Pe măsură ce numărul de elemente crește, dicționarul poate efectua rehashing, mărind dimensiunea structurii interne pentru a menține eficiența, ceea ce poate fi o operație relativ costisitoare.