Πώς είναι δομημένος ένας λεξικό στην Swift;
sobes.tech AI
Απάντηση από AI
Swift'teki Dictionary (Sözlük), düzenlenmemiş anahtar-değer çiftlerinden oluşan bir koleksiyonu temsil eder.
Ana özellikler:
- Düzenlenmemiş: Öğelerin sırası garanti edilmez.
- Benzersiz anahtarlar: Her anahtar sözlükte benzersiz olmalıdır.
- Hashlenebilir anahtarlar: Anahtar tipi hashlenebilir olmalıdır (yani,
Hashableprotokolüne uygun olmalı).String,Int,Double,Boolve çoğu yapı varsayılan olarak hashlenebilir. - Tip belirleme: Sözlük, anahtarlar ve değerler açısından katı tiptedir.
- Depolama: Bir hash tabanı üzerine uygulanmıştır, bu da ekleme, silme ve anahtar ile erişim işlemlerinde yüksek verimlilik sağlar (ortalama O(1)).
Sözlük oluşturma:
// Boş sözlük
var emptyDictionary: [String: Int] = [:]
// Başlangıç değerleri ile sözlük
let cities: [String: String] = [
"London": "UK",
"Paris": "France",
"Tokyo": "Japan"
]
Erişim ve değiştirme:
// Erişim by anahtar (Optional döner)
let country = cities["Paris"] // Optional("France")
// Değer ekleme veya güncelleme
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Ekleme
scores["Alice"] = 105 // Güncelleme
// Değer silme
scores["Bob"] = nil // "Bob" anahtarına sahip öğeyi silme
Döngü:
for (city, country) in cities {
print("\(city) in \(country)")
}
for city in cities.keys {
print("Şehir: \(city)")
}
for country in cities.values {
print("Ülke: \(country)")
}
İç yapısı (genel olarak):
Swift hash tablosu bazlı bir yapının değiştirilmiş bir uygulamasını kullanır. "Anahtar-değer" çifti eklenirken:
- Anahtarın hash değeri hesaplanır.
- Hash değeri, öğenin yerleştirileceği "kova"yı (bucket) belirlemek için kullanılır.
- Eğer kovada zaten öğeler varsa, çakışma çözüm mekanizması (örneğin, zincirleme veya açık adresleme) kullanılır.
Çoğu işlemin performansı (ekleme, silme, erişim), hash'ler düzgün dağıldığında ve az sayıda çakışma olduğunda O(1) civarındadır. En kötü durumda (tüm hash'ler tek bir kovaya düşerse), performans O(n)'ye düşebilir, ama bu, iyi hash fonksiyonları ve yeterli boyuttaki hash tablosu ile nadiren olur. Öğelerin sayısı arttıkça, sözlük rehashing yapabilir, iç yapıyı büyüterek verimliliği koruyabilir, bu da nispeten maliyetli bir işlem olabilir.