Sobes.tech
Junior — Middle

Comment créez-vous votre propre implémentation du dictionnaire?

sobes.tech IA

Réponse de l'IA

Pour créer une implémentation personnalisée d’un dictionnaire en iOS avec Swift, vous pouvez utiliser une structure de données basée sur une table de hachage. L’idée principale est de stocker des paires clé-valeur dans un tableau de buckets, où chaque bucket contient une liste d’éléments avec le même code de hachage (pour gérer les collisions).

Exemple d’une implémentation simple d’un dictionnaire utilisant un tableau et des chaînes:

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)
        // Vérifie si un élément avec cette clé existe déjà
        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
    }
}

// Utilisation:
var dict = MyDictionary<String, Int>()
dict.set(value: 42, forKey: "answer")
print(dict.get(forKey: "answer") ?? "not found")  // 42

Ce dictionnaire supporte les opérations de base d’insertion et de recherche. Pour une implémentation plus avancée, on peut ajouter la suppression, l’extension dynamique, une meilleure gestion des collisions, etc.