Hogyan épül fel egy szótár Swiftben?
sobes.tech MI
Válasz az MI-től
Swift-dakı Dictionary (Sözlük), təşkilatlanmamış cütlüklər toplusunu təmsil edir "açar-dəyər".
Əsas xüsusiyyətlər:
- Təşkilatlanmamış: Elementlərin sırası təmin edilmir.
- Unikal açarlar: Hər bir açar lüğətdə unikal olmalıdır.
- Hashable açarlar: Açar tipi hashable olmalıdır (yəni,
Hashableprotokoluna uyğun olmalıdır).String,Int,Double,Boolvə çoxlu strukturlar standart olaraq hashable-dir. - Tipləşdirmə: Lüğət sərt tiplidir, həm açarlar, həm də dəyərlər üçün.
- Saxlama: Hash cədvəli əsasında həyata keçirilmişdir, bu da əlavə etmə, silmə və açar üzrə giriş əməliyyatlarının yüksək səmərəliliyini təmin edir (orta hesabla O(1)).
Lüğət yaratmaq:
// Boş lüğət
var emptyDictionary: [String: Int] = [:]
// Başlanğıc dəyərlərlə lüğət
let cities: [String: String] = [
"London": "UK",
"Paris": "France",
"Tokyo": "Japan"
]
Giriş və dəyişiklik:
// Açar ilə giriş (Optional qaytarır)
let country = cities["Paris"] // Optional("France")
// Dəyər əlavə etmək və ya yeniləmək
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Əlavə
scores["Alice"] = 105 // Yeniləmə
// Dəyəri silmək
scores["Bob"] = nil // "Bob" açarına malik elementi silmək
Təkrarlama:
for (city, country) in cities {
print("\(city) in \(country)")
}
for city in cities.keys {
print("Şəhər: \(city)")
}
for country in cities.values {
print("Ölkə: \(country)")
}
Daxili struktur (ümumi):
Swift hash cədvəlini dəyişdirilmiş şəkildə istifadə edir. "Açar-dəyər" cütlüyü əlavə edilərkən:
- Açarın hash dəyəri hesablanır.
- Hash dəyəri, elementin yerləşdiriləcəyi "kova"nı (bucket) müəyyən etmək üçün istifadə olunur.
- Əgər kovada artıq elementlər varsa, toqquşma həll mexanizmi istifadə edilir (məsələn, zəncir və ya açıq ünvanlama).
Əksər əməliyyatların performansı (əlavə etmə, silmə, giriş) bərabər paylanmış hash-lər və az toqquşma ilə O(1)-ə yaxındır. Ən pis halda (bütün hash-lər bir kovaya düşərsə), performans O(n)-ə qədər pisləşə bilər, amma bu, yaxşı hash funksiyaları və kifayət qədər böyük hash cədvəli ilə nadir hallarda baş verir. Elementlərin sayı artdıqca, lüğət rehashing edə bilər, daxili strukturu böyüdərək səmərəliliyi qoruyur, bu isə nisbətən baha başa gələn əməliyyat ola bilər.