Junior — Middle
Come crei la tua implementazione del dizionario?
sobes.tech AI
Risposta dell'AI
Per creare una propria implementazione di un dizionario (dictionary) in iOS con Swift, puoi utilizzare una struttura dati basata su una tabella hash. L'idea principale è memorizzare coppie chiave-valore in un array di bucket, dove ogni bucket contiene una lista di elementi con lo stesso codice hash (per risolvere le collisioni).
Esempio di una semplice implementazione di un dizionario usando un array e catene:
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)
// Controlla se esiste già un elemento con questa chiave
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
}
}
// Uso:
var dict = MyDictionary<String, Int>()
dict.set(value: 42, forKey: "answer")
print(dict.get(forKey: "answer") ?? "not found") // 42
Questo tipo di dizionario supporta operazioni di base di inserimento e ricerca. Per un'implementazione più avanzata, si possono aggiungere rimozione, espansione dinamica, miglior gestione delle collisioni, ecc.