Sobes.tech
Middle

Swift-də sözlük necə qurulub?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də Dictionary (Lüğət) 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.
  • Tip təyin olunması: 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 (məsələn, zəncir və ya açıq ünvanlama) istifadə edilərək uyğun yer tapılır.

Ə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, lakin 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.