Ինչպես է կառուցված Swift-ի բառարանը?
sobes.tech AI
Պատասխան AI-ից
Տառատեսակ (Dictionary) Swift-ում ներկայացնում է հավաքածու չսորտավորված զույգերի « բանալի-արժեք »։
Հիմնական հատկանիշներ՝
- Չսորտավորվածություն: Էլեմենտների կարգը չի երաշխավորվում։
- Անվերական բանալիներ: Յուրաքանչյուր բանալի պետք է լինի յուրահատուկ։
- Հաշվելի բանալիներ: Բանալիի տիպը պետք է լինի հաշվելի (այսինքն՝ համապատասխաներ
Hashableպրոտոկոլին): Տիպեր, ինչպիսիք ենString,Int,Double,Boolև մեծամասնությունը կառուցվածքների, ըստ նախնական կարգի, հաշվելի են։ - Տիպավորում: Տառատեսակը խիստ տիպավորված է՝ ինչպես բանալիների, այնպես էլ արժեքների։
- Պահոց: Իրականացվում է հեշ-թերթի հիման վրա, ինչը ապահովում է բարձր արդյունավետություն մուտքագրման, հեռացման և մուտք գործելու համար՝ ըստ բանալիի (միջինում՝ O(1))։
Ստեղծում՝
// Բաց տառատեսակ
var emptyDictionary: [String: Int] = [:]
// Բառարան սկզբնական արժեքներով
let cities: [String: String] = [
"London": "UK",
"Paris": "France",
"Tokyo": "Japan"
]
Մուտք և փոփոխություն՝
// Մուտք ըստ բանալիի (վերադարձնում է Optional)
let country = cities["Paris"] // Optional("France")
// Ավելացում կամ թարմացում արժեքի
var scores: [String: Int] = ["Alice": 100, "Bob": 85]
scores["Charlie"] = 90 // Ավելացում
scores["Alice"] = 105 // Թարմացում
// Ապամպանում արժեք
scores["Bob"] = nil // Ապամպանում է տարր՝ բանալիով "Bob"
Իտերացիա՝
for (city, country) in cities {
print("\(city) գտնվում է \(country)")
}
for city in cities.keys {
print("Քաղաք: \(city)")
}
for country in cities.values {
print("Երկիր: \(country)")
}
Ներքին կառուցվածք (ընդհանուր)
Swift-ը օգտագործում է փոփոխված հեշ-թերթի իրականացում։ Երբ ավելացվում է «բանալի-արժեք» զույգը՝
- Հաշվարկվում է բանալիի հեշ-արժեքը։
- Հեշ-արժեքը օգտագործվում է «խցիկի» (bucket) որոշման համար, որտեղ պետք է տեղադրվի տարրը։
- Եթե խցիկում արդեն կան տարրեր, կիրառվում է հակասությունների լուծման մեխանիզմ (օրինակ՝ շղթայակապ կամ բաց հասցեագրման)՝ համապատասխան տեղ գտնելու համար։
Ամենամեծ մասշտաբով գործողությունների (մուտքագրում, հեռացում, մուտք գործում) արդյունավետությունը մոտ է O(1), եթե հեշերի հավասարաչափ բաշխում և փոքր հակասություններ։ Վատագույն դեպքում (երբ բոլոր հեշերը ընկնում են մեկ խցիկում) արդյունավետությունը կարող է նվազել մինչև O(n), բայց դա հազվադեպ է լավ հեշ-ֆունկցիաների և բավարար չափի հեշ-թերթի դեպքում։ Երբ ավելանում է տարրերի քանակը, բառարանը կարող է իրականացնել rehashing, մեծացնել ներքին կառուցվածքի չափը՝ պահպանելու արդյունավետությունը, ինչը կարող է լինել բավականին թանկ գործարք։