array у F# - це змінювана колекція, яка містить нуль або більше значень і має фіксовану довжину. Це означає, що після створення масиву його розмір змінити не можна, а значення - можна. Усі значення в масиві мають бути одного типу. Масиви можна визначати так:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
Елементи можна присвоювати масиву або отримувати з нього за допомогою індексу. Масиви у F# мають відлік від нуля: індекс першого елемента завжди дорівнює нулю:
let numbers = [| 2; 3; 5 |]
// Update value in array
numbers[2] <- 9
// Read value from array
numbers[2]
// => 9
Для роботи з масивами використовують функції та оператори, визначені в модулі Array. Деякі з цих функцій також доступні як властивості примірника array:
Array.length [| 7; 8 |] // => 2
[| 7; 8 |].Length // => 2
Тут немає правильного чи неправильного варіанта. Загалом функції з модуля 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"
Також під час зіставлення зі зразком можна відкинути значення: коли значення в конкретному випадку не має значення (тобто ми не збираємося його використовувати), можна позначити це знаком підкреслення ('_'):
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)"
Під час зіставлення зі зразком єдиний '_' завжди має стояти останнім: будь-яке значення, що не збігається з жодним з інших випадків, оброблятиме саме цей випадок.