Ar

Arrays em F#

3 exercícios

Sobre Arrays

Um array em F# é uma coleção mutável de zero ou mais valores com um comprimento fixo. Isto significa que, depois de um array ser criado, o seu tamanho não pode mudar, mas os seus valores podem. Os valores de um array têm todos de ter o mesmo tipo. Os 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" |]

Podes atribuir elementos a um array ou obtê-los a partir dele usando um índice. Os arrays em F# têm índice 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

Os arrays são manipulados por funções e operadores definidos no módulo Array. Algumas destas 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

Aqui não há uma opção certa nem errada. Em geral, as funções do módulo Array dão-se melhor com inferência de tipos, enquanto que as propriedades permitem um código mais conciso.

O padrão de array permite fazer correspondência de padrões com 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"

Também podes descartar um valor ao fazer correspondência de padrões; quando não te importas com um valor num caso específico (ou seja, não vais usar esse valor), podes usar um sublinhado ('_') para o indicar:

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 '_' isolado deve vir sempre em último lugar na correspondência de padrões; todos os valores que não correspondam a nenhum dos outros casos serão tratados por este caso.

Editar via GitHub A ligação abre numa nova janela ou separador

Aprende Arrays

A prática está bloqueada

Desbloqueia mais 2 exercícios para praticares Arrays