interface VariantMap<K,V>
A type-variant immutable Map of key type K, and value type V. In the Map, each key has exactly one value, and the Map cannot contain duplicate keys. See the Map documentation and the VariantMap API documentation
Companion namespace: VariantMap
Extends: VariantMapBase<K,V,Tp>
Implemented by: VariantMap.NonEmpty<K,V>
Type parameters
Name | Description |
---|---|
K | the key type |
V | the value type |
Type-variance means that both the key and value types can be widened in a type-safe way without casting. @note As a consequence of being variant, the type does not contain methods that (can) add new elements to the collection.
Properties
isEmpty
Returns true if the collection is empty.
isEmpty
size
Returns the number of entries
size
Methods
[Symbol.iterator]
Returns a FastIterator
instance used to iterate over the values of this Iterable
.
[Symbol.iterator]
FastIterator
instance used to iterate over the values of this Iterable
.assumeNonEmpty
Returns the collection as a .NonEmpty type
assumeNonEmpty
Definition
assumeNonEmpty():
WithKeyValue
<Tp, K, V>['nonEmpty'];
RimbuError.EmptyCollectionAssumedNonEmptyError if the collection is empty
HashMap.empty<number, number>().assumeNonEmpty() // => throws
const m: HashMap<number, number> = HashMap.of([1, 1], [2, 2])
const m2: HashMap.NonEmpty<number, number> = m // => compiler error
const m3: HashMap.NonEmpty<number, number> = m.assumeNonEmpty()
returns reference to this collection
Overrides
filter
Returns a collection containing only those entries that satisfy given pred
predicate.
filter
pred
predicate.Definition
filter(pred: (entry: readonly [K, V], index: number, halt: () => void) => boolean, options?: {
negate?: boolean;
}):
WithKeyValue
<Tp, K, V>['normal'];
Parameters
Name | Type | Description |
---|---|---|
pred | (entry: readonly [K, V], index: number, halt: () => void) => boolean | a predicate function receiving: - entry : the next entry- index : the entry index- halt : a function that, when called, ensures no next elements are passed |
options | { negate?: boolean; } | (optional) an object containing the following properties: - negate: (default: false) when true will negate the predicate |
HashMap.of([1, 'a'], [2, 'b'], [3, 'c']).filter(entry => entry[0] === 2 || entry[1] === 'c').toArray()
// => [[2, 'b'], [3, 'c']]
Overrides
forEach
Performs given function f
for each entry of the collection, using given state
as initial traversal state.
forEach
f
for each entry of the collection, using given state
as initial traversal state.Definition
forEach(f: (entry: readonly [K, V], index: number, halt: () => void) => void, options?: {
state?:
TraverseState
;
}): void;
Parameters
Name | Type | Description |
---|---|---|
f | (entry: readonly [K, V], index: number, halt: () => void) => void | the function to perform for each entry, receiving: - entry : the next tuple of a key and value- index : the index of the element- halt : a function that, if called, ensures that no new elements are passed |
options | { state?: TraverseState ; } | (optional) an object containing the following properties: - state:: (optional) the traversal state |
HashMap.of([1, 'a'], [2, 'b'], [3, 'c']).forEach((entry, i, halt) => {
console.log([entry[1], entry[0]]);
if (i >= 1) halt();
})
// => logs ['a', 1] ['b', 2]
O(N)
Overrides
get
Returns the value associated with the given key
, or given otherwise
value if the key is not in the collection.
get
key
, or given otherwise
value if the key is not in the collection.Definitions
get<UK = K>(key:
RelatedTo
<K, UK>): V
|
undefined;
get<UK, O>(key:
RelatedTo
<K, UK>, otherwise:
OptLazy
<O>): V
|
O;
Type parameters
Name | Default | Description |
---|---|---|
UK | K |
Parameters
Name | Type | Description |
---|---|---|
key | RelatedTo <K, UK> | the key to look for |
const m = HashMap.of([1, 'a'], [2, 'b'])
m.get(2) // => 'b'
m.get(3) // => undefined
m.get(2, 'none') // => 'b'
m.get(3, 'none') // => 'none'
Overrides
hasKey
Returns true if the given key
is present in the collection.
hasKey
key
is present in the collection.mapValues
Returns a collection with the same keys, but where the given mapFun
function is applied to each entry value.
mapValues
mapFun
function is applied to each entry value.Definition
mapValues<V2>(mapFun: (value: V, key: K) => V2): (Tp &
KeyValue
<K, V2>)['normal'];
Type parameters
Name | Description |
---|---|
V2 |
Parameters
Name | Type | Description |
---|---|---|
mapFun | (value: V, key: K) => V2 | a function taking a value and a key , and returning a new value |
HashMap.of([1, 'a'], [2, 'abc']).mapValues(v => v.length).toArray()
// => [[1, 1], [2, 3]]
Overrides
nonEmpty
Returns true if there is at least one entry in the collection, and instructs the compiler to treat the collection as a .NonEmpty type.
nonEmpty
Definition
nonEmpty(): this is
WithKeyValue
<Tp, K, V>['nonEmpty'];
const m: HashMap<number, number> = HashMap.of([1, 1], [2, 2])
m.stream().first(0) // compiler allows fallback value since the Stream may be empty
if (m.nonEmpty()) {
m.stream().first(0) // compiler error: fallback value not allowed since Stream is not empty
}
Overrides
removeKey
Returns the collection where the entry associated with given key
is removed if it was part of the collection.
removeKey
key
is removed if it was part of the collection.Definition
removeKey<UK = K>(key:
RelatedTo
<K, UK>):
WithKeyValue
<Tp, K, V>['normal'];
Type parameters
Name | Default | Description |
---|---|---|
UK | K |
Parameters
Name | Type | Description |
---|---|---|
key | RelatedTo <K, UK> | the key of the entry to remove |
const m = HashMap.of([1, 'a'], [2, 'b'])
m.removeKey(2).toArray() // => [[1, 'a']]
m.removeKey(3) === m // true
guarantees same object reference if the key is not present
Overrides
removeKeyAndGet
Returns a tuple containing the collection of which the entry associated with given key
is removed, and the value that is associated with that key. If the key is not present, it will return undefined instead.
removeKeyAndGet
key
is removed, and the value that is associated with that key. If the key is not present, it will return undefined instead.Definition
removeKeyAndGet<UK = K>(key:
RelatedTo
<K, UK>): [
WithKeyValue
<Tp, K, V>['normal'], V]
|
undefined;
Type parameters
Name | Default | Description |
---|---|---|
UK | K |
Parameters
Name | Type | Description |
---|---|---|
key | RelatedTo <K, UK> | the key of the entry to remove |
const m = HashMap.of([1, 'a'], [2, 'b'])
const result = m.removeKeyAndGet(2)
if (result !== undefined) console.log([result[0].toString(), result[1]]) // => logs [HashMap(1 => 'a'), 'b']
console.log(m.removeKeyAndGet(3)) // => logs undefined
Overrides
removeKeys
Returns the collection where the entries associated with each key in given keys
are removed if they were present.
removeKeys
keys
are removed if they were present.Definition
removeKeys<UK = K>(keys:
StreamSource
<
RelatedTo
<K, UK>>):
WithKeyValue
<Tp, K, V>['normal'];
Type parameters
Name | Default | Description |
---|---|---|
UK | K |
Parameters
Name | Type | Description |
---|---|---|
keys | StreamSource < RelatedTo <K, UK>> | a StreamSource of keys to remove |
const m = HashMap.of([1, 'a'], [2, 'b'])
m.removeKeys([1, 3]).toArray() // => [[2, 'b']]
m.removeKeys([1, 3, 2]).toArray() // => []
m.removeKeys([3, 4, 5]) === m // => true
guarantees same object reference if none of the keys are present
Overrides
stream
Returns a Stream
containing all entries of this collection as tuples of key and value.
stream
Stream
containing all entries of this collection as tuples of key and value.streamKeys
Returns a Stream
containing all keys of this collection.
streamKeys
Stream
containing all keys of this collection.streamValues
Returns a Stream
containing all values of this collection.
streamValues
Stream
containing all values of this collection.toArray
Returns an array containing all entries in this collection.
toArray
toJSON
Returns a JSON representation of this collection.
toJSON