Li

Listas em Elixir

47 exercícios

Sobre Listas

Listas são um tipo de dado básico no Elixir para guardar uma coleção de valores. As listas são imutáveis, ou seja, não podem ser modificadas. Qualquer operação que altere uma lista retorna uma nova lista. As listas implementam o protocolo Enumerable, o que permite usar as funções dos módulos Enum e Stream.

As listas no Elixir são implementadas como listas ligadas, e não como arrays de posições contíguas de memória. Por isso, acessar um elemento de uma lista leva tempo linear, que depende do comprimento da lista.

As listas podem ser escritas na forma literal, na notação cabeça-cauda (que usa o operador cons |), ou em uma combinação das duas:

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

Também pode haver mais de um elemento antes do operador cons (|).

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

A notação cabeça-cauda pode ser usada para acrescentar itens a uma lista.

list = [2, 1]

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

Acrescentar elementos a uma lista durante uma iteração é considerado um antipadrão. Acrescentar um elemento exige percorrer a lista inteira e adicionar o elemento no final. Por isso, acrescentar um novo elemento a cada iteração exigiria percorrer a lista inteira em cada iteração.

Podemos obter o mesmo resultado inserindo um elemento no início da lista invertida e depois invertendo o resultado. Inserir no início é uma operação rápida e leva tempo 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!

Existem várias funções comuns do Kernel para listas:

  • hd/1 retorna a cabeça de uma lista, ou seja, o primeiro item da lista.
  • tl/1 retorna a cauda da lista: a lista sem o primeiro item.
  • length/1 retorna o número de itens na lista.
  • in/2 retorna um valor Boolean indicando se o item é um elemento da lista.

Também existe o módulo List.

As listas podem conter qualquer tipo de dado e uma mistura de tipos de dados diferentes.

list = [1, :a, 2.0, "string"]
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Listas

A prática está bloqueada

Desbloqueie mais 6 exercícios para praticar Listas