Sobes.tech
Junior — Middle

Ինչպե՞ս եք ստեղծում ձեր սեփական բառարանի իրականացմանը։

sobes.tech AI

Պատասխան AI-ից

Swift-ով iOS-ում սեփական բառարանի (dictionary) իրականացում ստեղծելու համար կարող եք օգտագործել հեշ-թերթի վրա հիմնված տվյալների կառուցվածք։ Հիմնական գաղափարը՝ բանալին-արժեք զույգերը պահել բաքերի զանգվածում, որտեղ յուրաքանչյուր բաք պարունակում է նույն հեշ-կոդով տարրերի ցանկ (կոլիզիաների լուծման համար):

Պարզ օրինակ՝ զանգվածի և շղթաների օգտագործմամբ բառարանի պարզ իրականացում:

struct MyDictionary<Key: Hashable, Value> {
    private typealias Element = (key: Key, value: Value)
    private var buckets: [[Element]]
    private let capacity: Int

    init(capacity: Int = 16) {
        self.capacity = capacity
        self.buckets = Array(repeating: [], count: capacity)
    }

    private func index(forKey key: Key) -> Int {
        return abs(key.hashValue) % capacity
    }

    mutating func set(value: Value, forKey key: Key) {
        let index = self.index(forKey: key)
        // Ստուգում՝ արդյոք արդեն կա այդ բանալինով տարր
        if let i = buckets[index].firstIndex(where: { $0.key == key }) {
            buckets[index][i].value = value
        } else {
            buckets[index].append((key, value))
        }
    }

    func get(forKey key: Key) -> Value? {
        let index = self.index(forKey: key)
        return buckets[index].first(where: { $0.key == key })?.value
    }
}

// Օգտագործում՝
var dict = MyDictionary<String, Int>()
dict.set(value: 42, forKey: "answer")
print(dict.get(forKey: "answer") ?? "not found")  // 42

Այս տեսակի բառարանը աջակցում է հիմնական ներդրման և որոնման գործողություններին։ Ավելի առաջադեմ իրականացման համար կարելի է ավելացնել հեռացում, դինամիկ ընդլայնում, բարելավված կոլիզիաների կառավարում և այլն։