Az F#-ban az array egy rögzített hosszúságú, nulla vagy több értékből álló, módosítható gyűjtemény. Ez azt jelenti, hogy miután létrehoztál egy tömböt, a mérete már nem változhat, az értékei viszont igen. Egy tömbben minden értéknek ugyanolyan típusúnak kell lennie. A tömböket a következőképpen definiálhatod:
let empty = [| |]
let emptyAlternative = Array.empty
let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5
let threeValues = [| "a"; "b"; "c" |]
A tömb elemeihez index segítségével rendelhetsz értéket, és ugyanígy kérdezheted is le őket. Az F# tömbjei nullától indexeltek, ami azt jelenti, hogy az első elem indexe mindig nulla:
let numbers = [| 2; 3; 5 |]
// Update value in array
numbers[2] <- 9
// Read value from array
numbers[2]
// => 9
A tömböket az Array modulban definiált függvények és operátorok kezelik. Néhány ezek közül a függvények közül egy array példány tulajdonságaként is elérhető:
Array.length [| 7; 8 |] // => 2
[| 7; 8 |].Length // => 2
Itt nincs helyes vagy helytelen választás. Általában az Array modul függvényei jobban együttműködnek a típuskövetkeztetéssel, a tulajdonságok viszont tömörebb kódot tesznek lehetővé.
Az array pattern lehetővé teszi a mintaillesztést tömbökön:
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"
Mintaillesztéskor egy értéket el is dobhatsz; ha egy adott esetben nem törődsz egy értékkel (azaz nem fogod használni), ezt egy alulvonással ('_') jelezheted:
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)"
Mintaillesztéskor az egyetlen '_' mindig utolsó legyen: minden értéket, amely nem illeszkedik a többi eset egyikéhez sem, ez az eset kezel.