HashMapInt
Specalized when key type is int
, more efficient than the generic type
type key = int;
Type of the Belt.HashMap.Int
key.
type t('b);
Type of the Belt.HashMap.Int
let make: (~hintSize: int) => t('b);
make(~hintSize=10)
creates a new hash map by taking the hintSize
.
RE
let hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "a");
let clear: t('b) => unit;
Clears a hash table.
RElet hMap = Belt.HashMap.Int.fromArray([|(1, "1")|])
Belt.HashMap.Int.clear(hMap)
Belt.HashMap.Int.isEmpty(hMap) == true;
let isEmpty: t('a) => bool;
isEmpty(m)
checks whether a hash map is empty.
RElet hMap = Belt.HashMap.Int.fromArray([|(1, "1")|])
Belt.HashMap.Int.isEmpty(hMap) == false;
let set: (t('a), key, 'a) => unit;
set(tbl, k, v)
if k
does not exist, add the binding k,v
, otherwise, update the old value with the new v
.
RE
let hMap = Belt.HashMap.Int.fromArray([|(2, "2")|]);
Belt.HashMap.Int.set(hMap, 1, "1");
Belt.HashMap.Int.valuesToArray(hMap) == [|"1", "2"|];
let copy: t('a) => t('a);
Creates copy of a hash map.
RElet hMap1 = Belt.HashMap.Int.fromArray([|(1, "1"), (2, "2")|]);
let hMap2 = Belt.HashMap.Int.copy(hMap1)
Belt.HashMap.Int.set(hMap2, 2, "3");
Belt.HashMap.Int.get(hMap1, 2) != Belt.HashMap.Int.get(hMap2, 2)
let get: (t('a), key) => option('a);
let has: (t('b), key) => bool;
Returns value bound under specific key. If values not exist returns None
.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.get(hMap, 1) == Some("value1");
Belt.HashMap.Int.get(hMap, 2) == None;
let remove: (t('a), key) => unit;
If bound exists, removes it from the hash map.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.remove(hMap, 1);
Belt.HashMap.Int.has(hMap, 1) == false;
let forEachU: (t('b), [@bs] ((key, 'b) => unit)) => unit;
Same as forEach but takes uncurried functon.
let forEach: (t('b), (key, 'b) => 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
.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.forEach(hMap, (key, value) => Js.log2(key, value));
// prints ("1", "value1")
let reduceU: (t('b), 'c, [@bs] (('c, key, 'b) => 'c)) => 'c;
Same as reduce but takes uncurried functon.
let reduce: (t('b), 'c, ('c, key, 'b) => '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.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.set(hMap, 2, "value2");
Belt.HashMap.Int.reduce(hMap, "", (acc, key, value) => {
acc ++ ", " ++ value
}) == "value1, value2";
let keepMapInPlaceU: (t('a), [@bs] ((key, 'a) => option('a))) => unit;
Same as keepMapInPlace but takes uncurried functon.
let keepMapInPlace: (t('a), (key, 'a) => option('a)) => unit;
Filters out values for which function f
returned None
.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.set(hMap, 2, "value2");
Belt.HashMap.Int.keepMapInPlace(hMap, (key, value) => {
key mod 1 == 0 ? None : Some(value)
});
let size: t('a) => int;
size(tbl)
returns the number of bindings in tbl
. It takes constant time.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.set(hMap, 2, "value2");
Belt.HashMap.Int.size(hMap) == 2;
let toArray: t('a) => array((key, 'a));
Returns array of key value pairs.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.set(hMap, 2, "value2");
Belt.HashMap.Int.toArray(hMap) == [|(1, "value1"), (2, "value2")|];
let keysToArray: t('a) => array(key);
Returns array of keys.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.set(hMap, 2, "value2");
Belt.HashMap.Int.keysToArray(hMap) == [|1, 2|];
let valuesToArray: t('a) => array('a);
Returns array of values.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "value1");
Belt.HashMap.Int.set(hMap, 2, "value2");
Belt.HashMap.Int.valuesToArray(hMap) == [|"value1", "value2"|];
let fromArray: array((key, 'a)) => t('a);
Creates new hash map from array of pairs.
Returns array of values.
RElet hMap = Belt.HashMap.Int.fromArray([|(1, "value1"), (1, "value2")|]);
Belt.HashMap.Int.toArray(hMap) == [|(1, "value1"), (2, "value2")|];
let mergeMany: (t('a), array((key, 'a))) => unit;
Merges many key value pairs into hash map.
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.mergeMany(hMap, [|(1, "value1"), (2, "value2")|]);
let getBucketHistogram: t('a) => array(int);
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "1");
Belt.HashMap.Int.getBucketHistogram(hMap);
let logStats: t('a) => unit;
RElet hMap = Belt.HashMap.Int.make(~hintSize=10);
Belt.HashMap.Int.set(hMap, 1, "1");
Belt.HashMap.Int.logStats(hMap);