Sobes.tech
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.