HashSet
A mutable Hash set 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 HashSets of ints initialized with different hash functions will have different type.
Examples
RESCRIPTmodule I0 = unpack(
Belt.Id.hashableU(
~hash=(. a: int) => land(a, 65535),
~eq=(. a, b) => a == b,
)
)
let s0 = Belt.HashSet.make(~id=module(I0), ~hintSize=40)
module I1 = unpack(
Belt.Id.hashableU(
~hash=(. a: int) => land(a, 255),
~eq=(. a, b) => a == b,
)
)
let s1 = Belt.HashSet.make(~id=module(I1), ~hintSize=40)
Belt.HashSet.add(s1, 0)
Belt.HashSet.add(s1, 1)
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
RESCRIPTlet s0: Belt.HashSet.t<int, I0.identity>
let s1: Belt.HashSet.t<int, I1.identity>
We can add elements to the collection (see last two lines in the example
above). Since this is an mutable data structure, s1 will contain two pairs.
t
RESCRIPT
type t<'a, 'id>id
RESCRIPT
type id<'a, 'id> = Belt_Id.hashable<'a, 'id>The type of hash tables from type 'a to type 'b.
make
RESCRIPT
let make: (~hintSize: int, ~id: id<'a, 'id>) => t<'a, 'id>clear
RESCRIPT
let clear: t<'a, 'id> => unitisEmpty
RESCRIPT
let isEmpty: t<'a, 'b> => booladd
RESCRIPT
let add: (t<'a, 'id>, 'a) => unitcopy
RESCRIPT
let copy: t<'a, 'id> => t<'a, 'id>has
RESCRIPT
let has: (t<'a, 'id>, 'a) => boolremove
RESCRIPT
let remove: (t<'a, 'id>, 'a) => unitforEachU
RESCRIPT
let forEachU: (t<'a, 'id>, 'a => unit) => unitforEach
RESCRIPT
let forEach: (t<'a, 'id>, 'a => unit) => unitOrder unspecified.
reduceU
RESCRIPT
let reduceU: (t<'a, 'id>, 'c, ('c, 'a) => 'c) => 'creduce
RESCRIPT
let reduce: (t<'a, 'id>, 'c, ('c, 'a) => 'c) => 'cOrder unspecified.
size
RESCRIPT
let size: t<'a, 'id> => intlogStats
RESCRIPT
let logStats: t<'a, 'b> => unittoArray
RESCRIPT
let toArray: t<'a, 'id> => array<'a>fromArray
RESCRIPT
let fromArray: (array<'a>, ~id: id<'a, 'id>) => t<'a, 'id>mergeMany
RESCRIPT
let mergeMany: (t<'a, 'id>, array<'a>) => unitgetBucketHistogram
RESCRIPT
let getBucketHistogram: t<'a, 'b> => array<int>