arrayDesde: siempre
Una secuencia de valores.
Podés construir un array encerrando entre paréntesis una secuencia de valores separados por comas. Los valores no tienen por qué ser del mismo tipo.
Podés acceder a los elementos de un array y actualizarlos con el método .at(). Los índices empiezan en cero y los índices negativos dan la vuelta hasta el final del array. Podés iterar sobre un array con un bucle for. Los arrays se pueden sumar con el operador +, unir y multiplicar por enteros.
Nota: Un array de longitud uno necesita una coma final, como en (1,). Esto es para distinguirlo de una simple expresión entre paréntesis como (1 + 2) * 3. Un array vacío se escribe ().
Ejemplo
#let values = (1, 7, 4, -3, 2)
#values.at(0) \
#(values.at(0) = 3)
#values.at(-1) \
#values.find(calc.even) \
#values.filter(calc.odd) \
#values.map(calc.abs) \
#values.rev() \
#(1, (2, 3)).flatten() \
#(("A", "B", "C")
.join(", ", last: " and "))

Constructor
Convierte un valor en un array.
Tené en cuenta que esta función solo está pensada para convertir en array un valor similar a una colección, no para crear un array a partir de elementos individuales. Para eso, usá la sintaxis de array (1, 2, 3) (o (1,) para un array de un solo elemento).
Ver ejemplo
#let hi = "Hello 😃"
#array(bytes(hi))

value
El valor que se debe convertir en array.
Funciones
lenDesde: siempre
La cantidad de valores del array.
firstDesde: siempre
Devuelve el primer ítem del array. Se puede usar en el lado izquierdo de una asignación. Devuelve el valor por defecto si el array está vacío, o falla con un error si no se especificó ningún valor por defecto.
defaultany
Un valor por defecto para devolver si el array está vacío.
lastDesde: siempre
Devuelve el último ítem del array. Se puede usar en el lado izquierdo de una asignación. Devuelve el valor por defecto si el array está vacío, o falla con un error si no se especificó ningún valor por defecto.
defaultany
Un valor por defecto para devolver si el array está vacío.
atDesde: siempre
Devuelve el elemento del índice especificado en el array. Se puede usar en el lado izquierdo de una asignación. Devuelve el valor por defecto si el índice está fuera de rango, o falla con un error si no se especificó ningún valor por defecto.
index
El índice del elemento que se quiere obtener. Si es negativo, se indexa desde el final.
defaultany
Un valor por defecto para devolver si el índice está fuera de rango.
pushDesde: siempre
Agrega un valor al final del array.
valueanyObligatorioPosicional
El valor que se inserta al final del array.
popDesde: siempre
Elimina el último elemento del array y lo devuelve. Falla con un error si el array está vacío.
insertDesde: siempre
Inserta un valor en el array en el índice especificado y desplaza a la derecha todos los elementos siguientes. Falla con un error si el índice está fuera de rango.
Para reemplazar un elemento de un array, usá at.
index
El índice en el que se inserta el elemento. Si es negativo, se indexa desde el final.
valueanyObligatorioPosicional
El valor que se inserta en el array.
removeDesde: siempre
Elimina del array el valor del índice especificado y lo devuelve.
index
El índice del elemento que se quiere eliminar. Si es negativo, se indexa desde el final.
defaultany
Un valor por defecto para devolver si el índice está fuera de rango.
sliceDesde: siempre
Extrae una subsecuencia del array. Falla con un error si el índice de inicio o de fin está fuera de rango.
start
El índice inicial (inclusivo). Si es negativo, se indexa desde el final.
endPor defecto: none
El índice final (exclusivo). Si se omite, se extrae toda la porción hasta el final del array. Si es negativo, se indexa desde el final.
count
La cantidad de elementos que se extraen. Equivale a pasar start + count como posición end. Es mutuamente excluyente con end.
containsDesde: siempre
Si el array contiene el valor especificado.
Este método también tiene una sintaxis dedicada: podés escribir 2 in (1, 2, 3) en lugar de (1, 2, 3).contains(2).
valueanyObligatorioPosicional
El valor que se busca.
findDesde: siempre
Busca un elemento para el cual la función indicada devuelva true y devuelve la primera coincidencia, o none si no hay ninguna.
searcher
La función que se aplica a cada elemento. Debe devolver un booleano.
positionDesde: siempre
Busca un elemento para el cual la función indicada devuelva true y devuelve el índice de la primera coincidencia, o none si no hay ninguna.
searcher
La función que se aplica a cada elemento. Debe devolver un booleano.
Ver ejemplo
#let values = (1, 7, 4, 6, 9)
#values.position(x => calc.even(x)) \
// Or equivalently:
#values.position(calc.even)

rangeDesde: siempre
Crea un array formado por una secuencia de números.
Si pasás un solo parámetro posicional, se interpreta como el end del rango. Si pasás dos, describen el start y el end del rango.
Esta función está disponible tanto en el ámbito de la función array como de forma global.
Ver ejemplo
#range(5) \
#range(2, 5) \
#range(20, step: 4) \
#range(21, step: 4) \
#range(5, 2, step: -1)

startPor defecto: 0
El inicio del rango (inclusivo).
end
El final del rango.
inclusivePor defecto: false
Si end es inclusivo.
Ver ejemplo
#range(0, inclusive: true) \
#range(7, 10, inclusive: true) \
#range(-8, -4, inclusive: true) \
#range(-6, step: -2, inclusive: true)

stepPor defecto: 1
La distancia entre los números generados.
filterDesde: siempre
Produce un array nuevo solo con los elementos del original para los cuales la función indicada devuelve true.
test
La función que se aplica a cada elemento. Debe devolver un booleano.
mapDesde: siempre
Produce un array nuevo en el que todos los elementos del original se transformaron con la función indicada.
mapper
La función que se aplica a cada elemento.
enumerateDesde: 0.2.0
Devuelve un array nuevo con los valores junto a sus índices.
El array devuelto consiste en pares (index, value) en forma de arrays de longitud 2. Estos se pueden desestructurar con un enlace let o un bucle for.
Ver ejemplo
#for (i, value) in ("A", "B", "C").enumerate() {
[#i: #value \ ]
}
#("A", "B", "C").enumerate(start: 1)

startPor defecto: 0
El índice que se devuelve para el primer par de la lista resultante.
zipDesde: 0.3.0
Combina el array con otros arrays elemento a elemento.
Devuelve un array de arrays, donde el i-ésimo array interno contiene todos los i-ésimos elementos de cada array original.
Si los arrays que se combinan tienen longitudes distintas, se combinan hasta el último elemento del array más corto y se ignoran todos los elementos restantes.
Esta función es variádica, es decir, podés combinar varios arrays a la vez: (1, 2).zip(("A", "B"), (10, 20)) da ((1, "A", 10), (2, "B", 20)).
exactPor defecto: false
Si todos los arrays deben tener la misma longitud. Por ejemplo, (1, 2).zip((1, 2, 3), exact: true) produce un error.
others
Los arrays con los que se combina.
foldDesde: siempre
Pliega todos los elementos en un único valor usando una función acumuladora.
Ver ejemplo
#let array = (1, 2, 3, 4)
#array.fold(0, (acc, x) => acc + x)

initanyObligatorioPosicional
El valor inicial con el que se empieza.
folder
La función de plegado. Debe tener dos parámetros: uno para el valor acumulado y otro para un elemento.
sumDesde: 0.3.0
Suma todos los elementos (funciona con todos los tipos que se pueden sumar).
defaultany
Qué devolver si el array está vacío. Hay que establecerlo si el array puede estar vacío.
productDesde: 0.3.0
Calcula el producto de todos los elementos (funciona con todos los tipos que se pueden multiplicar).
defaultany
Qué devolver si el array está vacío. Hay que establecerlo si el array puede estar vacío.
anyDesde: siempre
Si la función indicada devuelve true para algún elemento del array.
test
La función que se aplica a cada elemento. Debe devolver un booleano.
allDesde: siempre
Si la función indicada devuelve true para todos los elementos del array.
test
La función que se aplica a cada elemento. Debe devolver un booleano.
flattenDesde: siempre
Combina todos los arrays anidados en un único array plano.
revDesde: siempre
Devuelve un array nuevo con los mismos elementos, pero en orden inverso.
splitDesde: siempre
Divide el array en las apariciones del valor especificado.
Ver ejemplo
#(1, 1, 2, 3, 2, 4, 5).split(2)

atanyObligatorioPosicional
El valor por el que se divide.
joinDesde: siempre
Combina todos los elementos del array en uno solo.
separatorPor defecto: none
Un valor que se inserta entre cada elemento del array.
lastany
Un separador alternativo entre los dos últimos elementos.
defaultnone o anyPor defecto: none
Qué devolver si el array está vacío.
intersperseDesde: 0.8.0
Devuelve un array con una copia del valor separador colocada entre los elementos adyacentes.
Ver ejemplo
#("A", "B", "C").intersperse("-")

separatoranyObligatorioPosicional
El valor que se coloca entre cada par de elementos adyacentes.
chunksDesde: 0.11.0
Divide un array en fragmentos que no se superponen, empezando por el principio y terminando con un único fragmento restante.
Todos los fragmentos menos el último tienen chunk-size elementos. Si exact es true, el fragmento restante se descarta si contiene menos de chunk-size elementos.
Ver ejemplo
#let array = (1, 2, 3, 4, 5, 6, 7, 8)
#array.chunks(3) \
#array.chunks(3, exact: true)

chunk-size
Cuántos elementos puede contener como máximo cada fragmento.
exactPor defecto: false
Si se descarta el fragmento restante cuando su tamaño es menor que chunk-size.
windowsDesde: 0.12.0
Devuelve ventanas deslizantes de window-size elementos sobre un array.
Si la longitud del array es menor que window-size, devuelve un array vacío.
Ver ejemplo
#let array = (1, 2, 3, 4, 5, 6, 7, 8)
#array.windows(5)

window-size
Cuántos elementos contendrá cada ventana.
sortedDesde: siempre
Devuelve una versión ordenada de este array, opcionalmente según una función de clave. El algoritmo de ordenamiento usado es estable.
Devuelve un error si no se pudo comparar un par de valores seleccionados para la comparación, o si la función de clave o de comparación (si se indica) produce un error.
Para ordenar según varios criterios a la vez, por ejemplo en caso de igualdad entre algunos criterios, la función de clave puede devolver un array. Los resultados se ordenan lexicográficamente.
Ver ejemplo
#let array = (
(a: 2, b: 4),
(a: 1, b: 5),
(a: 2, b: 3),
)
#array.sorted(key: it => (it.a, it.b))

key
Si se indica, aplica esta función a cada elemento del array para determinar las claves por las que se ordena.
by
Si se indica, usa esta función para comparar cada par de elementos del array.
La función recibirá dos elementos del array para compararlos y debería devolver un booleano que indique su orden: true indica que los elementos están en orden, mientras que false indica que hay que intercambiarlos. Para mantener la estabilidad del ordenamiento, si los dos elementos son iguales, la función debería devolver true.
Si esta función no ordena correctamente los elementos (por ejemplo, al devolver false tanto para (x, y) como para (y, x), o para (x, x)), el array resultante tendrá un orden no especificado.
Cuando se usa junto con key, a by se le pasan las claves en lugar de los elementos.
Ver ejemplo
#(
"sorted",
"by",
"decreasing",
"length",
).sorted(
key: s => s.len(),
by: (l, r) => l >= r,
)

dedupDesde: 0.7.0
Elimina los elementos duplicados del array.
Devuelve un array nuevo sin los elementos duplicados. Solo se conserva el primer elemento de cada duplicado.
Ver ejemplo
#(3, 3, 1, 2, 3).dedup()

key
Si se indica, aplica esta función a cada elemento del array para determinar las claves por las que se elimina la duplicación.
Ver ejemplo
#("apple", "banana", " apple ").dedup(key: s => s.trim())

to-dictDesde: 0.12.0
Convierte un array de pares en un diccionario. El primer valor de cada par es la clave y el segundo, el valor.
Si la misma clave aparece varias veces, se selecciona el último valor.
Ver ejemplo
#(
("apples", 2),
("peaches", 3),
("apples", 5),
).to-dict()

reduceDesde: 0.12.0
Reduce los elementos a uno solo, aplicando repetidamente una operación de reducción.
Si el array está vacío, devuelve none; de lo contrario, devuelve el resultado de la reducción.
La función de reducción es una clausura con dos argumentos: un “acumulador” y un elemento.
Para arrays con al menos un elemento, esto equivale a array.fold con el primer elemento del array como valor inicial del acumulador, plegando en él cada elemento siguiente.
Ver ejemplo
#let array = (2, 1, 4, 3)
#array.reduce((acc, x) => calc.max(acc, x))

reducer
La función de reducción. Debe tener dos parámetros: uno para el valor acumulado y otro para un elemento.