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

RESCRIPT
module I0 = unpack(Belt.Id.hashable(~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.hashable(~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.

Signatures:

let 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.

add

RESCRIPT
let add: (t<'a, 'id>, 'a) => unit

clear

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

copy

RESCRIPT
let copy: t<'a, 'id> => t<'a, 'id>

forEach

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

Order unspecified.

forEachU

Deprecated

Use forEach instead

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

fromArray

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

getBucketHistogram

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

has

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

id

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

The type of hash tables from type 'a to type 'b.

isEmpty

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

logStats

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

make

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

mergeMany

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

reduce

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

Order unspecified.

reduceU

Deprecated

Use reduce instead

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

remove

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

size

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

t

RESCRIPT
type t<'a, 'id>

toArray

RESCRIPT
let toArray: t<'a, 'id> => array<'a>