Junior — Middle
Чӣ гуна шумо татбиқи луғро месозед?
sobes.tech AI
Ҷавоб аз AI
Барои сохтани татбиқи худсохти луғати (dictionary) дар iOS бо Swift, шумо метавонед структураи додаҳоро истифода баред, ки асос ёфтааст ба таблиҳаи ҳеш. Ҳадафи асосӣ ин аст, ки ҷуфтҳои калид-арзишро дар массиви бакетҳо нигоҳ доред, ки ҳар як бакет рӯйхати элементҳоро бо ҳамон код ҳеш дорад (барои ҳалли коллизияҳо).
Масалан, татбиқи оддӣ бо истифода аз массив ва занҷирҳо:
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
Ин навъи луғати асосӣ амалҳои ворид кардан ва ҷустуҷӯро дастгирӣ мекунад. Барои иҷрои пешрафта, метавон илова кард, ки аз он хориҷ кардан, васеъкунии динамикӣ, беҳтар кардани идоракунии коллизияҳо ва ғайра.