Un array 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 de la siguiente manera:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
Se pueden asignar elementos a un array o recuperarlos de él mediante un índice. Los arrays de F# están basados en 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, o manualmente mediante la coincidencia de patrones usando el patrón array:
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 usar la coincidencia de patrones; cuando no te importa un valor en un caso concreto (es decir, no vas a usar un 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 usar la coincidencia de patrones; todo valor que no coincida con ninguno de los otros casos será gestionado por este caso.
Eres un aficionado a la observación de aves que lleva la cuenta de cuántos pájaros han visitado tu jardín en los últimos siete días.
Tienes seis tareas, todas relacionadas con el número de pájaros que han visitado tu jardín.
Para poder comparar, siempre tienes cerca una copia de los recuentos de la semana pasada, que fueron: 0, 2, 5, 3, 7, 8 y 4. Define el enlace lastWeek que contiene los recuentos de la semana pasada:
lastWeek
// => [| 0; 2; 5; 3; 7; 8; 4 |]
Implementa la función yesterday para que devuelva cuántos pájaros visitaron tu jardín ayer. Los recuentos de pájaros están ordenados por día: el primer elemento es el recuento del día más antiguo y el último es el recuento de hoy.
yesterday [| 3; 5; 0; 7; 4; 1 |]
// => 4
Implementa la función total para que devuelva el número total de pájaros que han visitado tu jardín:
total [| 3; 5; 0; 7; 4; 1 |]
// => 20
Implementa la función dayWithoutBirds que devuelve true si hubo un día en el que ningún pájaro visitó el jardín; en caso contrario, devuelve false:
dayWithoutBirds [| 3; 5; 0; 7; 4; 1 |]
// => true
Implementa la función incrementTodaysCount para que incremente el recuento de hoy y devuelva los recuentos actualizados:
let birdCount = [| 3; 5; 0; 7; 4; 1 |]
incrementTodaysCount birdCount
// => [| 3; 5; 0; 7; 4; 2 |]
Durante el último año, has descubierto que algunas semanas tienen los mismos patrones inusuales:
Implementa la función unusualWeek que devuelve true si el patrón de recuento de pájaros de esta semana coincide con uno de los patrones inusuales:
unusualWeek [| 1; 0; 5; 0; 12; 0; 2 |]
// => true
unusualWeek [| 5; 0; 5; 12; 5; 3; 5|]
// => true
(Ten en cuenta que la paridad de los días se cuenta desde 1, no desde 0: el primer elemento del array se corresponde con un día impar)
Regístrate en Exercism para aprender y dominar F# con 18 conceptos148 ejercicios y mentoría humana real, todo gratis.