Li

Listas en Elixir

47 ejercicios

Acerca de Listas

Las listas son un tipo de dato básico en Elixir que sirve para contener 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, 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 ubicaciones de memoria contiguas. Por eso, acceder a un elemento de una lista toma 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 con 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 agregar elementos al final de una lista.

list = [2, 1]

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

Agregar elementos al final de una lista durante una iteración se considera un antipatrón. Agregar un elemento requiere recorrer toda la lista y añadirlo al final; por lo tanto, agregar un elemento nuevo en cada iteración requeriría recorrer toda la lista en cada iteración.

Podemos lograr el mismo resultado anteponiendo un elemento a la lista invertida y luego invirtiendo el resultado. Anteponer es una operación rápida y requiere 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 comunes de Kernel para listas:

  • hd/1 devuelve la cabeza de una lista, 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 la cantidad de elementos de la lista.
  • in/2 devuelve un valor Boolean que indica si el elemento está en la lista.

También existe el módulo List.

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

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

Aprende Listas

La práctica está bloqueada

Desbloquea 6 ejercicios más para practicar Listas