MapDict
This module separates identity from data, it is a bit more verbose but slightly more efficient due to the fact that there is no need to pack identity and data back after each operation
Advanced usage only
t
REStype t<'key, 'value, 'id>
cmp
REStype cmp<'key, 'id> = Belt_Id.cmp<'key, 'id>
empty
RESlet empty: t<'k, 'v, 'id>
isEmpty
RESlet isEmpty: t<'k, 'v, 'id> => bool
has
RESlet has: (t<'k, 'a, 'id>, 'k, ~cmp: cmp<'k, 'id>) => bool
cmpU
RESlet cmpU: (t<'k, 'v, 'id>, t<'k, 'v, 'id>, ~kcmp: cmp<'k, 'id>, ~vcmp: (. 'v, 'v) => int) => int
cmp
RESlet cmp: (t<'k, 'v, 'id>, t<'k, 'v, 'id>, ~kcmp: cmp<'k, 'id>, ~vcmp: ('v, 'v) => int) => int
eqU
RESlet eqU: (t<'k, 'a, 'id>, t<'k, 'a, 'id>, ~kcmp: cmp<'k, 'id>, ~veq: (. 'a, 'a) => bool) => bool
eq
RESlet eq: (t<'k, 'a, 'id>, t<'k, 'a, 'id>, ~kcmp: cmp<'k, 'id>, ~veq: ('a, 'a) => bool) => bool
eq(m1, m2, cmp)
tests whether the maps m1
and m2
are equal, that is, contain equal keys and associate them with equal data. cmp
is the equality predicate used to compare the data associated with the keys.
findFirstByU
RESlet findFirstByU: (t<'k, 'v, 'id>, (. 'k, 'v) => bool) => option<('k, 'v)>
findFirstBy
RESlet findFirstBy: (t<'k, 'v, 'id>, ('k, 'v) => bool) => option<('k, 'v)>
findFirstBy(m, p)
uses function f
to find the first key value pair to match predicate p
.
RESmodule IntCmp = Belt.Id.MakeComparable({
type t = int
let cmp = Pervasives.compare
})
let s0 = Belt.Map.Dict.fromArray([(4, "4"), (1, "1"), (2, "2"), (3, "3")], ~cmp=IntCmp.cmp)
Belt.Map.Dict.findFirstBy(s0, (k, _) => k == 4) == Some((4, "4"))
forEachU
RESlet forEachU: (t<'k, 'a, 'id>, (. 'k, 'a) => unit) => unit
forEach
RESlet forEach: (t<'k, 'a, 'id>, ('k, 'a) => unit) => unit
forEach(m, f)
applies f
to all bindings in map m
. f
receives the key as first argument, and the associated value as second argument. The bindings are passed to f
in increasing order with respect to the ordering over the type of the keys.
reduceU
RESlet reduceU: (t<'k, 'a, 'id>, 'b, (. 'b, 'k, 'a) => 'b) => 'b
reduce
RESlet reduce: (t<'k, 'a, 'id>, 'b, ('b, 'k, 'a) => 'b) => 'b
reduce(m, a, f)
computes f(kN, dN ... f(k1, d1, a)...)
, where k1 ... kN
are the keys of all bindings in m
(in increasing order), and d1 ... dN
are the associated data.
everyU
RESlet everyU: (t<'k, 'a, 'id>, (. 'k, 'a) => bool) => bool
every
RESlet every: (t<'k, 'a, 'id>, ('k, 'a) => bool) => bool
every(m, p)
checks if all the bindings of the map satisfy the predicate p
. Order unspecified
someU
RESlet someU: (t<'k, 'a, 'id>, (. 'k, 'a) => bool) => bool
some
RESlet some: (t<'k, 'a, 'id>, ('k, 'a) => bool) => bool
some(m, p)
checks if at least one binding of the map satisfy the predicate p
. Order unspecified
size
RESlet size: t<'k, 'a, 'id> => int
toList
RESlet toList: t<'k, 'a, 'id> => list<('k, 'a)>
In increasing order.
toArray
RESlet toArray: t<'k, 'a, 'id> => array<('k, 'a)>
fromArray
RESlet fromArray: (array<('k, 'a)>, ~cmp: cmp<'k, 'id>) => t<'k, 'a, 'id>
keysToArray
RESlet keysToArray: t<'k, 'a, 'id> => array<'k>
valuesToArray
RESlet valuesToArray: t<'k, 'a, 'id> => array<'a>
minKey
RESlet minKey: t<'k, 'a, 'b> => option<'k>
minKeyUndefined
RESlet minKeyUndefined: t<'k, 'a, 'b> => Js.undefined<'k>
maxKey
RESlet maxKey: t<'k, 'a, 'b> => option<'k>
maxKeyUndefined
RESlet maxKeyUndefined: t<'k, 'a, 'b> => Js.undefined<'k>
minimum
RESlet minimum: t<'k, 'a, 'b> => option<('k, 'a)>
minUndefined
RESlet minUndefined: t<'k, 'a, 'b> => Js.undefined<('k, 'a)>
maximum
RESlet maximum: t<'k, 'a, 'b> => option<('k, 'a)>
maxUndefined
RESlet maxUndefined: t<'k, 'a, 'b> => Js.undefined<('k, 'a)>
get
RESlet get: (t<'k, 'a, 'id>, 'k, ~cmp: cmp<'k, 'id>) => option<'a>
getUndefined
RESlet getUndefined: (t<'k, 'a, 'id>, 'k, ~cmp: cmp<'k, 'id>) => Js.undefined<'a>
getWithDefault
RESlet getWithDefault: (t<'k, 'a, 'id>, 'k, 'a, ~cmp: cmp<'k, 'id>) => 'a
getExn
RESlet getExn: (t<'k, 'a, 'id>, 'k, ~cmp: cmp<'k, 'id>) => 'a
checkInvariantInternal
RESlet checkInvariantInternal: t<'a, 'b, 'c> => unit
remove
RESlet remove: (t<'a, 'b, 'id>, 'a, ~cmp: cmp<'a, 'id>) => t<'a, 'b, 'id>
remove(m, x)
returns a map containing the same bindings as m
, except for x
which is unbound in the returned map.
removeMany
RESlet removeMany: (t<'a, 'b, 'id>, array<'a>, ~cmp: cmp<'a, 'id>) => t<'a, 'b, 'id>
set
RESlet set: (t<'a, 'b, 'id>, 'a, 'b, ~cmp: cmp<'a, 'id>) => t<'a, 'b, 'id>
set(m, x, y)
returns a map containing the same bindings as m
, plus a binding of x
to y
. If x
was already bound in m
, its previous binding disappears.
updateU
RESlet updateU: (
t<'a, 'b, 'id>,
'a,
(. option<'b>) => option<'b>,
~cmp: cmp<'a, 'id>,
) => t<'a, 'b, 'id>
update
RESlet update: (t<'a, 'b, 'id>, 'a, option<'b> => option<'b>, ~cmp: cmp<'a, 'id>) => t<'a, 'b, 'id>
mergeU
RESlet mergeU: (
t<'a, 'b, 'id>,
t<'a, 'c, 'id>,
(. 'a, option<'b>, option<'c>) => option<'d>,
~cmp: cmp<'a, 'id>,
) => t<'a, 'd, 'id>
merge
RESlet merge: (
t<'a, 'b, 'id>,
t<'a, 'c, 'id>,
('a, option<'b>, option<'c>) => option<'d>,
~cmp: cmp<'a, 'id>,
) => t<'a, 'd, 'id>
merge(m1, m2, f)
computes a map whose keys is a subset of keys of m1
and of m2
. The presence of each such binding, and the corresponding value, is determined with the function f
.
mergeMany
RESlet mergeMany: (t<'a, 'b, 'id>, array<('a, 'b)>, ~cmp: cmp<'a, 'id>) => t<'a, 'b, 'id>
keepU
RESlet keepU: (t<'k, 'a, 'id>, (. 'k, 'a) => bool) => t<'k, 'a, 'id>
keep
RESlet keep: (t<'k, 'a, 'id>, ('k, 'a) => bool) => t<'k, 'a, 'id>
keep(m, p)
returns the map with all the bindings in m
that satisfy predicate p
.
partitionU
RESlet partitionU: (t<'k, 'a, 'id>, (. 'k, 'a) => bool) => (t<'k, 'a, 'id>, t<'k, 'a, 'id>)
partition
RESlet partition: (t<'k, 'a, 'id>, ('k, 'a) => bool) => (t<'k, 'a, 'id>, t<'k, 'a, 'id>)
partition(m, p)
returns a pair of maps (m1, m2)
, where m1
contains all the bindings of s
that satisfy the predicate p
, and m2
is the map with all the bindings of s
that do not satisfy p
.
split
RESlet split: (
t<'a, 'b, 'id>,
'a,
~cmp: cmp<'a, 'id>,
) => ((t<'a, 'b, 'id>, t<'a, 'b, 'id>), option<'b>)
split(x, m)
returns a triple (l, data, r)
, where l
is the map with all the bindings of m
whose key is strictly less than x
; r
is the map with all the bindings of m
whose key is strictly greater than x
; data
is None
if m
contains no binding for x
, or Some(v)
if m
binds v
to x
.
mapU
RESlet mapU: (t<'k, 'a, 'id>, (. 'a) => 'b) => t<'k, 'b, 'id>
map
RESlet map: (t<'k, 'a, 'id>, 'a => 'b) => t<'k, 'b, 'id>
map(m, f)
returns a map with same domain as m
, where the associated value a
of all bindings of m
has been replaced by the result of the application of f
to a
. The bindings are passed to f
in increasing order with respect to the ordering over the type of the keys.
mapWithKeyU
RESlet mapWithKeyU: (t<'k, 'a, 'id>, (. 'k, 'a) => 'b) => t<'k, 'b, 'id>
mapWithKey
RESlet mapWithKey: (t<'k, 'a, 'id>, ('k, 'a) => 'b) => t<'k, 'b, 'id>