Un array (o arreglo) en F# es una colección mutable de cero o más valores con una longitud fija. Esto significa que, una vez creado un array, su tamaño no puede cambiar, pero sus valores sí. Todos los valores de un array deben tener el mismo tipo. Los arrays se pueden definir así:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
Puedes asignar elementos a un array o recuperarlos de él usando un índice. Los arrays de F# están indexados desde cero, lo que significa que el índice del primer elemento siempre es cero:
let numbers = [| 2; 3; 5 |]
// Update value in array
numbers[2] <- 9
// Read value from array
numbers[2]
// => 9
Los arrays se manipulan con funciones y operadores definidos en el módulo Array. Algunas de estas funciones también están disponibles como propiedades de una instancia de array:
Array.length [| 7; 8 |] // => 2
[| 7; 8 |].Length // => 2
Aquí no hay una opción correcta ni incorrecta. En general, las funciones del módulo Array se llevan mejor con la inferencia de tipos, mientras que las propiedades permiten un código más conciso.
El patrón de array permite usar la coincidencia de patrones con arrays:
let describe array =
match array with
| [| |] -> "Empty"
| [| 1; 2; three |] -> sprintf "1, 2, %d" three
| _ -> "Other"
describe [| |] // => "Empty"
describe [| 1; 2; 4 |] // => "1, 2, 4"
describe [| 5; 7; 9 |] // => "Other"
También puedes descartar un valor al hacer coincidencia de patrones; cuando no te importa un valor en un caso específico (es decir, no vas a usar ese valor) puedes usar un guion bajo ('_') para indicarlo:
let describe array =
match array with
| [| |] -> "Empty array"
| [| x |] -> "Array with one item"
| [| _; y |] -> "Array with two items (first item ignored)"
| _ -> "Array with many items (all items ignored)"
describe [| |] // => "Empty array"
describe [| 1 |] // => "Array with one item"
describe [| 5; 7 |] // => "Array with two items (first item ignored)"
describe [| 5; 7; 9 |] // => "Array with many items (all items ignored)"
El '_' siempre debe ir al final al hacer coincidencia de patrones; todo valor que no coincida con ninguno de los otros casos será manejado por este caso.