This is the latest docs version
Quick Links
  • -Overview
  • -Language Features
  • -JS Interop
  • -Build System
Documentation
Language Manual
Reference for all language features
ReScript & React
First class bindings for ReactJS
GenType
Seamless TypeScript integration
Reanalyze
Dead Code & Termination analysis
Exploration
Packages
Explore third party libraries and bindings
Syntax Lookup
Discover all syntax constructs
APIPlaygroundBlogCommunity
  • Playground
  • Blog
  • Twitter
  • GitHub
  • Forum
Belt Module
Overview
Belt
submodules
  • Array
  • Float
  • HashMap
    • t
      t
    • t
      id
    • v
      make
    • v
      clear
    • v
      isEmpty
    • v
      set
    • v
      copy
    • v
      get
    • v
      has
    • v
      remove
    • v
      forEachU
    • v
      forEach
    • v
      reduceU
    • v
      reduce
    • v
      keepMapInPlaceU
    • v
      keepMapInPlace
    • v
      size
    • v
      toArray
    • v
      keysToArray
    • v
      valuesToArray
    • v
      fromArray
    • v
      mergeMany
    • v
      getBucketHistogram
    • v
      logStats
    • String
    • Int
    HashSet
    • String
    • Int
    Id
    • MakeHashable
    • MakeHashableU
    • MakeComparable
    • MakeComparableU
  • Int
  • List
  • Map
    • Dict
    • String
    • Int
    MutableMap
    • String
    • Int
  • MutableQueue
  • MutableSet
    • String
    • Int
  • MutableStack
  • Option
  • Range
  • Result
  • Set
    • Dict
    • String
    • Int
    SortArray
    • String
    • Int
    API / Belt / Hashmap

    HashMap

    A mutable Hash map which allows customized hash behavior.

    All data are parameterized by not its only type but also a unique identity in the time of initialization, so that two HashMaps of ints initialized with different hash functions will have different type.

    Examples

    RESCRIPT
    type t = int module I0 = unpack(Belt.Id.hashableU(~hash=(. a: t) => "&"(a, 0xff_ff), ~eq=(. a, b) => a == b)) let s0: t<_, string, _> = make(~hintSize=40, ~id=module(I0)) module I1 = unpack(Belt.Id.hashableU(~hash=(. a: t) => "&"(a, 0xff), ~eq=(. a, b) => a == b)) let s1: t<_, string, _> = make(~hintSize=40, ~id=module(I1))

    The invariant must be held: for two elements who are equal, their hashed value should be the same

    Here the compiler would infer s0 and s1 having different type so that it would not mix.

    Examples

    RESCRIPT
    let s0: t<int, I0.identity> let s1: t<int, I1.identity>

    We can add elements to the collection:

    Examples

    RESCRIPT
    let () = { add(s1, 0, "3") add(s1, 1, "3") }

    Since this is an mutable data strucure, s1 will contain two pairs.

    t

    RESCRIPT
    type t<'key, 'value, 'id>

    The type of hash tables from type 'key to type 'value.

    id

    RESCRIPT
    type id<'a, 'id> = Belt_Id.hashable<'a, 'id>

    The identity needed for making an empty hash map.

    make

    RESCRIPT
    let make: (~hintSize: int, ~id: id<'key, 'id>) => t<'key, 'value, 'id>

    make(~hintSize=10, ~id) creates a new map by taking in the comparator and hintSize.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let hMap = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(hMap, 0, "a")

    clear

    RESCRIPT
    let clear: t<'key, 'value, 'id> => unit

    Clears a hash table.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let hMap = Belt.HashMap.fromArray([(1, "1")], ~id=module(IntHash)) Belt.HashMap.clear(hMap) Belt.HashMap.isEmpty(hMap) == true

    isEmpty

    RESCRIPT
    let isEmpty: t<'a, 'b, 'c> => bool

    isEmpty(m) checks whether a hash map is empty.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) Belt.HashMap.isEmpty(Belt.HashMap.fromArray([(1, "1")], ~id=module(IntHash))) == false

    set

    RESCRIPT
    let set: (t<'key, 'value, 'id>, 'key, 'value) => unit

    set(hMap, k, v) if k does not exist, add the binding k,v, otherwise, update the old value with the new v.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.fromArray([(2, "2"), (1, "1"), (3, "3")], ~id=module(IntHash)) Belt.HashMap.set(s0, 2, "3") Belt.HashMap.valuesToArray(s0) == ["1", "3", "3"]

    copy

    RESCRIPT
    let copy: t<'key, 'value, 'id> => t<'key, 'value, 'id>

    Creates copy of a hash map.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.fromArray([(2, "2"), (1, "1"), (3, "3")], ~id=module(IntHash)) let s1 = Belt.HashMap.copy(s0) Belt.HashMap.set(s0, 2, "3") Belt.HashMap.get(s0, 2) != Belt.HashMap.get(s1, 2)

    get

    RESCRIPT
    let get: (t<'key, 'value, 'id>, 'key) => option<'value>

    Returns value bound under specific key. If values not exist returns None.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.get(s0, 1) == Some("value1") Belt.HashMap.get(s0, 2) == None

    has

    RESCRIPT
    let has: (t<'key, 'value, 'id>, 'key) => bool

    Checks if x is bound in tbl.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.has(s0, 1) == true Belt.HashMap.has(s0, 2) == false

    remove

    RESCRIPT
    let remove: (t<'key, 'value, 'id>, 'key) => unit

    If bound exists, removes it from the hash map.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.remove(s0, 1) Belt.HashMap.has(s0, 1) == false

    forEachU

    RESCRIPT
    let forEachU: (t<'key, 'value, 'id>, ('key, 'value) => unit) => unit

    Same as forEach but takes uncurried function.

    forEach

    RESCRIPT
    let forEach: (t<'key, 'value, 'id>, ('key, 'value) => unit) => unit

    forEach(tbl, f) applies f to all bindings in table tbl. f receives the key as first argument, and the associated value as second argument. Each binding is presented exactly once to f.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.forEach(s0, (key, value) => Js.log2(key, value)) // prints (1, "value1")

    reduceU

    RESCRIPT
    let reduceU: (t<'key, 'value, 'id>, 'c, ('c, 'key, 'value) => 'c) => 'c

    reduce

    RESCRIPT
    let reduce: (t<'key, 'value, 'id>, 'c, ('c, 'key, 'value) => 'c) => 'c

    reduce(tbl, init, f) computes (f(kN, dN) ... (f(k1, d1, init))...), where k1 ... kN are the keys of all bindings in tbl, and d1 ... dN are the associated values. Each binding is presented exactly once to f.

    The order in which the bindings are passed to f is unspecified. However, if the table contains several bindings for the same key, they are passed to f in reverse order of introduction, that is, the most recent binding is passed first.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.set(s0, 2, "value2") Belt.HashMap.reduce(s0, "", (acc, key, value) => acc ++ (", " ++ value)) == "value1, value2"

    keepMapInPlaceU

    RESCRIPT
    let keepMapInPlaceU: ( t<'key, 'value, 'id>, ('key, 'value) => option<'value>, ) => unit

    Same as keepMapInPlace but takes uncurried function.

    keepMapInPlace

    RESCRIPT
    let keepMapInPlace: ( t<'key, 'value, 'id>, ('key, 'value) => option<'value>, ) => unit

    Filters out values for which function f returned None.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.set(s0, 2, "value2") Belt.HashMap.keepMapInPlace(s0, (key, value) => key == 1 ? None : Some(value))

    size

    RESCRIPT
    let size: t<'a, 'b, 'c> => int

    size(tbl) returns the number of bindings in tbl. It takes constant time.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.set(s0, 2, "value2") Belt.HashMap.size(s0) == 2

    toArray

    RESCRIPT
    let toArray: t<'key, 'value, 'id> => array<('key, 'value)>

    Returns array of key value pairs.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.set(s0, 2, "value2") Belt.HashMap.toArray(s0) == [(1, "value1"), (2, "value2")]

    keysToArray

    RESCRIPT
    let keysToArray: t<'key, 'a, 'b> => array<'key>

    Returns array of keys.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.set(s0, 2, "value2") Belt.HashMap.keysToArray(s0) == [1, 2]

    valuesToArray

    RESCRIPT
    let valuesToArray: t<'a, 'value, 'b> => array<'value>

    Returns array of values.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(s0, 1, "value1") Belt.HashMap.set(s0, 2, "value2") Belt.HashMap.valuesToArray(s0) == ["value1", "value2"]

    fromArray

    RESCRIPT
    let fromArray: ( array<('key, 'value)>, ~id: id<'key, 'id>, ) => t<'key, 'value, 'id>

    Creates new hash map from array of pairs.

    Returns array of values.

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let s0 = Belt.HashMap.fromArray([(1, "value1"), (2, "value2")], ~id=module(IntHash)) Belt.HashMap.toArray(s0) == [(1, "value1"), (2, "value2")]

    mergeMany

    RESCRIPT
    let mergeMany: (t<'key, 'value, 'id>, array<('key, 'value)>) => unit

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let hMap = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.mergeMany(hMap, [(1, "1"), (2, "2")])

    getBucketHistogram

    RESCRIPT
    let getBucketHistogram: t<'a, 'b, 'c> => array<int>

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let hMap = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(hMap, 1, "1") Belt.HashMap.getBucketHistogram(hMap)

    logStats

    RESCRIPT
    let logStats: t<'a, 'b, 'c> => unit

    Examples

    RESCRIPT
    module IntHash = Belt.Id.MakeHashable({ type t = int let hash = a => a let eq = (a, b) => a == b }) let hMap = Belt.HashMap.make(~hintSize=10, ~id=module(IntHash)) Belt.HashMap.set(hMap, 1, "1") Belt.HashMap.logStats(hMap)
    Types and values
    • t
      t
    • t
      id
    • v
      make
    • v
      clear
    • v
      isEmpty
    • v
      set
    • v
      copy
    • v
      get
    • v
      has
    • v
      remove
    • v
      forEachU
    • v
      forEach
    • v
      reduceU
    • v
      reduce
    • v
      keepMapInPlaceU
    • v
      keepMapInPlace
    • v
      size
    • v
      toArray
    • v
      keysToArray
    • v
      valuesToArray
    • v
      fromArray
    • v
      mergeMany
    • v
      getBucketHistogram
    • v
      logStats

    © 2024 The ReScript Project

    Software and assets distribution powered by KeyCDN.

    About
    • Community
    • ReScript Association
    Find us on