Elixir - Listes de mots clés

Jusqu'à présent, nous n'avons pas discuté des structures de données associatives, c'est-à-dire des structures de données qui peuvent associer une certaine valeur (ou plusieurs valeurs) à une clé. Différents langages appellent ces fonctionnalités avec des noms différents comme des dictionnaires, des hachages, des tableaux associatifs, etc.

Dans Elixir, nous avons deux structures de données associatives principales: les listes de mots clés et les cartes. Dans ce chapitre, nous nous concentrerons sur les listes de mots clés.

Dans de nombreux langages de programmation fonctionnelle, il est courant d'utiliser une liste de tuples à 2 éléments comme représentation d'une structure de données associative. Dans Elixir, lorsque nous avons une liste de tuples et que le premier élément du tuple (c'est-à-dire la clé) est un atome, nous l'appelons une liste de mots clés. Prenons l'exemple suivant pour comprendre la même chose -

list = [{:a, 1}, {:b, 2}]

Elixir prend en charge une syntaxe spéciale pour définir de telles listes. On peut placer les deux points à la fin de chaque atome et se débarrasser entièrement des tuples. Par exemple,

list_1 = [{:a, 1}, {:b, 2}]
list_2 = [a: 1, b: 2]
IO.puts(list_1 == list_2)

Le programme ci-dessus générera le résultat suivant -

true

Ces deux éléments représentent une liste de mots clés. Puisque les listes de mots clés sont également des listes, nous pouvons utiliser toutes les opérations que nous avons utilisées sur les listes.

Pour récupérer la valeur associée à un atome dans la liste de mots clés, passez l'atome à [] après le nom de la liste -

list = [a: 1, b: 2]
IO.puts(list[:a])

Le programme ci-dessus génère le résultat suivant -

1

Les listes de mots-clés ont trois caractéristiques spéciales -

  • Les clés doivent être des atomes.
  • Les clés sont commandées, comme spécifié par le développeur.
  • Les clés peuvent être données plus d'une fois.

Afin de manipuler les listes de mots clés, Elixir fournit le module Keyword . N'oubliez pas, cependant, que les listes de mots clés sont simplement des listes et, en tant que telles, elles fournissent les mêmes caractéristiques de performances linéaires que les listes. Plus la liste est longue, plus il faudra de temps pour trouver une clé, compter le nombre d'éléments, etc. Pour cette raison, les listes de mots clés sont utilisées dans Elixir principalement comme des options. Si vous avez besoin de stocker de nombreux éléments ou de garantir des associés à une clé avec une seule valeur maximale, vous devez utiliser des cartes à la place.

Accéder à une clé

Pour accéder aux valeurs associées à une clé donnée, nous utilisons le Keyword.getfonction. Il renvoie la première valeur associée à la clé donnée. Pour obtenir toutes les valeurs, nous utilisons la fonction Keyword.get_values. Par exemple -

kl = [a: 1, a: 2, b: 3] 
IO.puts(Keyword.get(kl, :a)) 
IO.puts(Keyword.get_values(kl))

Le programme ci-dessus générera le résultat suivant -

1
[1, 2]

Insérer une clé

Pour ajouter une nouvelle valeur, utilisez Keyword.put_new. Si la clé existe déjà, sa valeur reste inchangée -

kl = [a: 1, a: 2, b: 3]
kl_new = Keyword.put_new(kl, :c, 5)
IO.puts(Keyword.get(kl_new, :c))

Lorsque le programme ci-dessus est exécuté, il produit une nouvelle liste de mots clés avec une clé supplémentaire, c et génère le résultat suivant -

5

Supprimer une clé

Si vous souhaitez supprimer toutes les entrées d'une clé, utilisez Keyword.delete; pour supprimer uniquement la première entrée d'une clé, utilisez Keyword.delete_first.

kl = [a: 1, a: 2, b: 3, c: 0]
kl = Keyword.delete_first(kl, :b)
kl = Keyword.delete(kl, :a)

IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get(kl, :b))
IO.puts(Keyword.get(kl, :c))

Cela supprimera le premier b dans la liste et tous les adans la liste. Lorsque le programme ci-dessus est exécuté, il générera le résultat suivant -

0