Li

Listas en Elixir

47 ejercicios

Acerca de Listas

Las listas son un tipo de datos básico en Elixir para almacenar una colección de valores. Las listas son inmutables, lo que significa que no se pueden modificar. Cualquier operación que cambie una lista devuelve una lista nueva. Las listas implementan el protocolo Enumerable, lo que permite usar las funciones de los módulos Enum y Stream.

Las listas en Elixir se implementan como listas enlazadas, y no como arrays de posiciones de memoria contiguas. Por lo tanto, acceder a un elemento de una lista requiere un tiempo lineal en función de la longitud de la lista.

Las listas se pueden escribir en forma literal, en notación cabeza-cola (que usa el operador cons |) o en una combinación de ambas:

# 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]]

También puede haber más de un elemento antes del operador cons (|).

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

La notación cabeza-cola se puede usar para añadir elementos al final de una lista.

list = [2, 1]

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

Añadir elementos al final de una lista durante una iteración se considera un antipatrón. Añadir un elemento al final requiere recorrer toda la lista y colocar el elemento al final; por lo tanto, añadir un elemento nuevo en cada iteración obligaría a recorrer toda la lista en cada iteración.

Podemos obtener el mismo resultado anteponiendo un elemento a la lista invertida y, después, invirtiendo el resultado. Anteponer es una operación rápida y requiere un tiempo constante.

# 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!

Hay varias funciones habituales de Kernel para listas:

  • hd/1 devuelve la cabeza de una lista, es decir, el primer elemento de la lista.
  • tl/1 devuelve la cola de la lista, es decir, la lista sin el primer elemento.
  • length/1 devuelve el número de elementos de la lista.
  • in/2 devuelve un valor Boolean que indica si el elemento forma parte de la lista.

También existe el módulo List.

Las listas pueden contener cualquier tipo de datos y una mezcla de tipos de datos distintos.

list = [1, :a, 2.0, "string"]
Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Listas

La práctica está bloqueada

Desbloquea 6 ejercicios más para practicar Listas