En Elm, las listas (List) son muy comunes, pero cuando necesitamos acceso rápido por índice, actualizaciones eficientes o manejar colecciones grandes, entra en juego Array.
Un Array en Elm es una estructura inmutable y eficiente que permite:
- Acceder a elementos por índice (O(log n)).
- Actualizar posiciones específicas sin mutar el original.
- Convertirse fácilmente a listas (`List`) y viceversa.
Su módulo se importa así:
import Array exposing (Array)
Podés crearlo vacío o a partir de una lista:
-- Array vacío
vacio : Array Int
vacio = Array.empty
-- Desde una lista
numeros : Array Int
numeros = Array.fromList [10, 20, 30, 40]
Y también convertirlo nuevamente a lista:
Array.toList numeros
-- [10, 20, 30, 40]
Para obtener el valor en un índice determinado:
Array.get 2 numeros
-- Just 30
Observá que devuelve un Maybe, ya que el índice podría no existir.
Array.get 10 numeros
-- Nothing
-- Actualizar el valor en la posición 1
actualizado =
Array.set 1 25 numeros
Array.toList actualizado
-- [10, 25, 30, 40]
Cada modificación devuelve un nuevo Array, sin alterar el original (inmutabilidad funcional).
Para agregar al final, usamos Array.push:
conNuevo =
Array.push 50 numeros
Array.toList conNuevo
-- [10, 20, 30, 40, 50]
Y para quitar el último, usamos Array.pop:
sinUltimo =
Array.pop conNuevo
Array.toList sinUltimo
-- [10, 20, 30, 40]
Podés recorrerlo de manera muy parecida a una lista:
Array.map (\x -> x * 2) numeros
-- {20, 40, 60, 80}
Y también filtrarlo o transformarlo:
Array.filter (\x -> x > 20) numeros
-- {30, 40}
Y hay más!! :
Array.length: Devuelve el tamaño
Array.length numeros --> 4
|
Array.isEmpty: ¿Está vacío?
Array.isEmpty Array.empty --> True
Array.initialize: Crea un array con una función
Array.initialize 5 (\i -> i * 2) --> {0,2,4,6,8}
Array.foldl/Array.foldr: Reduce el array
Array.foldl (+) 0 numeros --> 100 |
Veamos un ejemplo completo:
import Array exposing (Array)
main =
let
nums = Array.fromList [1,2,3,4]
dobles = Array.map (\n -> n * 2) nums
filtrados = Array.filter (\n -> n > 4) dobles
in
Array.toList filtrados
-- Resultado: [6,8]
Array en Elm te da:
- Acceso rápido por índice
- Inmutabilidad garantizada
- Operaciones eficientes
- Interoperabilidad con List
Usá List cuando pienses en secuencias y Array cuando necesites posiciones.