Li

Listes en Elixir

47 exercices

À propos de Listes

Les listes sont un type de données de base en Elixir pour stocker une collection de valeurs. Les listes sont immuables, ce qui signifie qu'elles ne peuvent pas être modifiées. Toute opération qui modifie une liste renvoie une nouvelle liste. Les listes implémentent le protocole Enumerable, ce qui permet d'utiliser les fonctions des modules Enum et Stream.

En Elixir, les listes sont implémentées sous forme de listes chaînées, et non comme des tableaux d'emplacements mémoire contigus. Par conséquent, accéder à un élément d'une liste prend un temps linéaire qui dépend de la longueur de la liste.

On peut écrire les listes sous forme littérale, en notation tête-queue (qui utilise l'opérateur cons |), ou avec une combinaison des deux :

# Literal Form
[]
[1]
[1, 2, 3]

# Head-tail Notation
[]
# same as [1]
[1 | []]
# same as [1, 2, 3]
[1 | [2 | [3 | []]]]

# Mixed
# same as [1, 2, 3]
[1 | [2, 3]]

Il peut aussi y avoir plus d'un élément avant l'opérateur cons (|).

# Multiple prepends
[1, 2, 3 | [4, 5]]

La notation tête-queue peut servir à ajouter des éléments à une liste.

list = [2, 1]

[3, 2, 1] == [3 | list]
# => true

Ajouter des éléments à une liste pendant une itération est considéré comme un anti-pattern. Ajouter un élément en fin de liste oblige à parcourir toute la liste pour le placer à la fin ; par conséquent, ajouter un nouvel élément à chaque itération obligerait à parcourir toute la liste à chaque itération.

On peut obtenir le même résultat en ajoutant un élément en tête de la liste inversée, puis en inversant le résultat. L'ajout en tête est une opération rapide qui prend un temps constant.

# Appending to the end of a list (potentially slow)
[1, 2, 3] ++ [4] ++ [5] ++ [6]

# Prepend to the start of a list (faster, due to the nature of linked lists)
[6 | [5 | [4 | [3, 2, 1]]]]
# then reverse!

Plusieurs fonctions courantes du module Kernel s'appliquent aux listes :

  • hd/1 renvoie la tête d'une liste, autrement dit le premier élément de la liste.
  • tl/1 renvoie la queue de la liste, c'est-à-dire la liste moins son premier élément.
  • length/1 renvoie le nombre d'éléments de la liste.
  • in/2 renvoie une valeur booléenne indiquant si l'élément fait partie de la liste.

Il existe aussi le module List.

Les listes peuvent contenir n'importe quel type de données et un mélange de types de données différents.

list = [1, :a, 2.0, "string"]
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet

Apprends Listes

L'entraînement est verrouillé

Déverrouille 6 exercices de plus pour t'entraîner sur Listes