Sobes.tech
Middle

Kako je strukturiran rečnik u Swift-u?

sobes.tech АИ

Одговор од АИ

Rečnik (Dictionary) u Swift predstavlja kolekciju neuređenih parova "ključ-vrednost".

Osobine:

  • Neuređenost: Poredak elemenata nije garantovan.
  • Jedinstveni ključevi: Svaki ključ u rečniku mora biti jedinstven.
  • Hranjivi ključevi: Tip ključa mora biti hranjiv (tj., da odgovara protokolu Hashable). Tipovi poput String, Int, Double, Bool i većina struktura su hranjivi po defaultu.
  • Tipizacija: Rečnik je strogo tipiziran, i po ključevima i po vrednostima.
  • Skladištenje: Implementiran je na osnovu hash tabele, što obezbeđuje visoku efikasnost operacija umetanja, brisanja i pristupa po ključu (prosečno O(1)).

Kreiranje rečnika:

// Prazan rečnik
var emptyDictionary: [String: Int] = [:]

// Rečnik sa početnim vrednostima
let cities: [String: String] = [
    "London": "UK",
    "Paris": "France",
    "Tokyo": "Japan"
]

Pristup i modifikacija:

// Pristup po ključu (vraća Optional)
let country = cities["Paris"] // Optional("France")

// Dodavanje ili ažuriranje vrednosti
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Dodavanje
scores["Alice"] = 105 // Ažuriranje

// Brisanje vrednosti
scores["Bob"] = nil // Brisanje elementa sa ključem "Bob"

Iteracija:

for (city, country) in cities {
    print("\(city) je u \(country)")
}

for city in cities.keys {
    print("Grad: \(city)")
}

for country in cities.values {
    print("Zemlja: \(country)")
}

Unutrašnja struktura (opšte):

Swift koristi modifikovanu implementaciju hash tabele. Pri umetanju para "ključ-vrednost":

  1. Izračunava se hash vrednost ključa.
  2. Hash vrednost se koristi za određivanje "kontejnera" (bucket), u koji treba da bude smešten element.
  3. Ako u kontejneru već postoje elementi, koristi se mehanizam za rešavanje kolizija (npr., lance ili otvorenu adresaciju) za pronalaženje odgovarajućeg mesta.

Performanse većine operacija (ubacivanje, brisanje, pristup) su blizu O(1) uz ravnomerno raspoređivanje heševa i mali broj kolizija. U najgorem slučaju (kada svi heševi padnu u jedan kontejner) performanse mogu degradirati do O(n), ali je to retka pojava za dobre hash funkcije i dovoljan veličinu hash tabele. Povećanjem broja elemenata, rečnik može izvršiti rehashing, povećavajući veličinu unutrašnje strukture radi održavanja efikasnosti, što može biti relativno skupa operacija.