ProgrammationDéveloppeur Swift

Comment fonctionnent les structures de données Dictionary en Swift ? Quelles caractéristiques de mise en œuvre doivent être prises en compte pour une utilisation optimale, et quelles difficultés peuvent survenir lors du stockage et du traitement de clés complexes ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

Dictionary — un conteneur associatif en Swift qui stocke des paires « clé-valeur ». Les clés doivent implémenter les protocoles Hashable et Equatable pour garantir l'unicité et un temps d'accès constant aux éléments.

Caractéristiques :

  • Les clés doivent être uniques.
  • L'accès, l'ajout et la suppression se font en temps amorti O(1).
  • L'utilisation de clés complexes est possible si Hashable et Equatable sont explicitement implémentés.

Exemple :

struct EmployeeID: Hashable { let company: String let id: Int } var employees: [EmployeeID: String] = [ EmployeeID(company: "A", id: 1): "Alice", EmployeeID(company: "B", id: 2): "Bob" ] let empName = employees[EmployeeID(company: "A", id: 1)] // Alice

Question piège.

Un Dictionary peut-il accepter un type utilisateur comme clé qui n'implémente pas Hashable ?

— Incorrect. Si un type n'implémente pas Hashable, il ne peut pas être utilisé comme clé. Une tentative d'utilisation entraînera une erreur de compilation.

Exemple :

class Foo {} var dict: [Foo: Int] = [:] // Erreur : Foo n'implémente pas Hashable

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet.


Histoire

Dans un projet, nous stockions des clés Dictionary basées sur des structures avec des tableaux à l'intérieur. La structure ne respectait pas le protocole Hashable, ce qui faisait que le Dictionary ne fonctionnait pas. Solution : implémenter notre propre hashValue en tenant compte de tous les champs, y compris les tableaux.


Histoire

Nous avons utilisé des sous-classes NSObject comme clés, en nous appuyant sur l'adresse de l'objet. Après avoir réécrit une partie du code avec des structures, les données ne correspondaient plus : les valeurs de hachage des structures étaient calculées différemment, ce qui entraînait une perte d'accessibilité aux données.


Histoire

Lors du stockage d'un dictionnaire avec une clé complexe, nous avons oublié d'implémenter Equatable. Résultat : les éléments avec des paramètres identiques étaient considérés comme des clés différentes, des doublons apparaissaient et des erreurs survenaient lors de la recherche dans le dictionnaire.