Um array em F# é uma coleção mutável de zero ou mais valores com comprimento fixo. Isso significa que, depois que um array é criado, seu tamanho não pode mudar, mas seus valores sim. Todos os valores de um array precisam ter o mesmo tipo. Arrays podem ser definidos da seguinte forma:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
Elementos podem ser atribuídos a um array ou recuperados dele usando um índice. Os arrays em F# são baseados em zero, o que significa que o índice do primeiro elemento é sempre zero:
let numbers = [| 2; 3; 5 |]
// Update value in array
numbers[2] <- 9
// Read value from array
numbers[2]
// => 9
Arrays são manipulados por funções e operadores definidos no módulo Array. Algumas dessas funções também estão disponíveis como propriedades de uma instância de array:
Array.length [| 7; 8 |] // => 2
[| 7; 8 |].Length // => 2
Não existe opção certa ou errada aqui. Em geral, as funções do módulo Array se dão melhor com inferência de tipo, enquanto as propriedades permitem um código mais conciso.
O padrão de array permite fazer correspondência de padrões em 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"
Você também pode descartar um valor ao fazer correspondência de padrões; quando você não se importa com um valor em um caso específico (ou seja, você não vai usar aquele valor), pode usar um sublinhado ('_') para indicar isso:
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)"
O '_' sozinho deve sempre vir por último na correspondência de padrões; todo valor que não corresponder a nenhum dos outros casos será tratado por esse caso.