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.