Skip to main content
Version: 0.60.1

Map Module

FScript maps are string-keyed.

Key takeaway: map indexers are always string.

Map.empty : 'v map

Empty map.

let m = Map.empty

Map.tryGet : string -> 'v map -> 'v option

Looks up a key.

let m = { ["a"] = 1 }
let maybeA = m |> Map.tryGet "a"

Map.containsKey : string -> 'v map -> bool

Checks key existence.

let hasA = { ["a"] = 1 } |> Map.containsKey "a"

Map.add : string -> 'v -> 'v map -> 'v map

Adds or replaces a key value.

let updated = Map.add "port" 8080 Map.empty

Map.ofList : (string * 'v) list -> 'v map

Builds a map from key-value tuples.

let m = [("a", 1); ("b", 2)] |> Map.ofList

Map.fold : ('state -> string -> 'v -> 'state) -> 'state -> 'v map -> 'state

Folds over key-value entries.

let total =
{ ["a"] = 1; ["b"] = 2 }
|> Map.fold (fun acc _ value -> acc + value) 0

Map.count : 'v map -> int

Returns entry count.

let n = { ["a"] = 1; ["b"] = 2 } |> Map.count

Map.filter : (string -> 'v -> bool) -> 'v map -> 'v map

Keeps entries that satisfy predicate.

let small =
{ ["a"] = 1; ["b"] = 10 }
|> Map.filter (fun _ v -> v < 5)

Map.choose : (string -> 'v -> 'u option) -> 'v map -> 'u map

Transforms entries and drops None results.

let parsed =
{ ["a"] = "1"; ["b"] = "x" }
|> Map.choose (fun _ v -> Int.tryParse v)

Map.map : ('v -> 'u) -> 'v map -> 'u map

Transforms values.

let doubled = { ["x"] = 2 } |> Map.map (fun v -> v * 2)

Map.iter : (string -> 'v -> unit) -> 'v map -> unit

Iterates entries for side effects.

{ ["x"] = 2; ["y"] = 3 } |> Map.iter (fun k v -> print $"{k}={v}")

Map.remove : string -> 'v map -> 'v map

Removes a key.

let m = { ["x"] = 2 } |> Map.remove "x"

Invalid key examples

Only string keys are valid.

// Invalid: int key
// let bad = { [1] = "one" }

// Invalid: bool key
// let alsoBad = { [true] = "yes" }