You are currently looking at the v6.0 - v8.2 docs (Reason v3.6 syntax edition). You can find the latest API docs here.
(These docs cover all versions between v3 to v8 and are equivalent to the old BuckleScript docs before the rebrand)
HashMap
The top level provides generic mutable hash map operations.
t
REtype t('key, 'value, 'id);
The type of hash tables from type 'key
to type 'value
.
id
REtype id('a, 'id) = BeltId.hashable('a, 'id);
The identity needed for making an empty hash map.
make
RElet 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
.
REmodule 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
RElet clear: t('key, 'value, 'id) => unit;
Clears a hash table.
REmodule 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
RElet isEmpty: t('a, 'b, 'c) => bool;
isEmpty(m)
checks whether a hash map is empty.
REmodule 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
RElet 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
.
REmodule 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
RElet copy: t('key, 'value, 'id) => t('key, 'value, 'id);
Creates copy of a hash map.
REmodule 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
RElet get: (t('key, 'value, 'id), 'key) => option('value);
Returns value bound under specific key. If values not exist returns None
.
REmodule 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
RElet has: (t('key, 'value, 'id), 'key) => bool;
Checks if x
is bound in tbl
.
REmodule 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
RElet remove: (t('key, 'value, 'id), 'key) => unit;
If bound exists, removes it from the hash map.
REmodule 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
RElet forEachU: (t('key, 'value, 'id), [@bs] (('key, 'value) => unit)) => unit;
Same as forEach but takes uncurried functon.
forEach
RElet 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
.
REmodule 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
RElet reduceU: (t('key, 'value, 'id), 'c, [@bs] (('c, 'key, 'value) => 'c)) => 'c;
Same as reduce but takes uncurried functon.
reduce
RElet 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.
REmodule 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
RElet keepMapInPlaceU: (t('key, 'value, 'id), [@bs] (('key, 'value) => option('value))) => unit;
Same as keepMapInPlace but takes uncurried functon.
keepMapInPlace
RElet keepMapInPlace: (t('key, 'value, 'id), ('key, 'value) => option('value)) => unit;
Filters out values for which function f
returned None
.
REmodule 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
RElet size: t('a, 'b, 'c) => int;
size(tbl)
returns the number of bindings in tbl
. It takes constant time.
REmodule 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
RElet toArray: t('key, 'value, 'id) => array(('key, 'value));
Returns array of key value pairs.
REmodule 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
RElet keysToArray: t('key, 'a, 'b) => array('key);
Returns array of keys.
REmodule 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
RElet valuesToArray: t('a, 'value, 'b) => array('value);
Returns array of values.
REmodule 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
RElet fromArray: (array(('key, 'value)), ~id: id('key, 'id)) => t('key, 'value, 'id);
Creates new hash map from array of pairs.
Returns array of values.
REmodule 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
RElet mergeMany: (t('key, 'value, 'id), array(('key, 'value))) => unit;
REmodule 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
RElet getBucketHistogram: t('a, 'b, 'c) => array(int);
REmodule 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
RElet logStats: t('a, 'b, 'c) => unit;
REmodule 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);