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
ეს ტიპის ლექსიკონი მხარს უჭერს ძირითადი ოპერაციებს: ჩაწერა და ძიება. უფრო მოწინავე რეალიზაციისთვის, შესაძლებელია დამატება წაშლა, დინამიკური გაფართოება, კოლიზიების გაუმჯობესებული მართვა და სხვა.