Sobes.tech
Middle

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, Hashable protokoluna uyğun olmalıdır). String, Int, Double, Bool və ç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:

  1. Açarın hash dəyəri hesablanır.
  2. Hash dəyəri, elementin yerləşdiriləcəyi "kova"nı (bucket) müəyyən etmək üçün istifadə olunur.
  3. Ə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.