Arrays and Spans

let arr = [| 1; 2; 3; 4; 5 |]               // mutable, fixed-size, O(1) indexing
arr[0] <- 10                                 // mutate an element
arr[1..3]                                    // slice: [|2; 3; 4|]
Array.length arr
Array.zeroCreate<int> 5                      // [|0; 0; 0; 0; 0|]
Array.create 3 "x"
Array.init 5 (fun i -> i * i)
// Array module mirrors List: Array.map, Array.filter, Array.fold, Array.sum, Array.sortInPlace, Array.copy, Array.blit
[| for i in 1 .. 5 -> i * 2 |]
Array.Parallel.map (fun x -> x * x) [| 1 .. 1_000_000 |]   // parallel map
System.Array.BinarySearch([| 1; 3; 5; 7 |], 5)             // 2 (on a sorted array)

// Multidimensional arrays
let grid = Array2D.create 3 3 0
grid[1, 1] <- 5
Array2D.length1 grid                         // 3
let jagged = [| [| 1; 2 |]; [| 3 |] |]

// ResizeArray = System.Collections.Generic.List<T> (a growable array)
let ra = ResizeArray<int>()
ra.Add 1
ra.AddRange [2; 3]
ra.Count                                     // 3

// Span<T> / Memory<T> for high-performance slicing without allocation
open System
let data = [| 1 .. 10 |]
let span = data.AsSpan(2, 3)                 // view over elements 2..4
span[0] <- 100     
…