more-maps
v2.1.0
Published
A collection of additional map-like data structures. Including a bidirectional map, a multi map, and a bidirectional multi map.
Downloads
74
Maintainers
Readme
More Maps
A collection of additional map-like data structures. Including a bidirectional map, a multi map, and a bidirectional multi map.
Installation
$ npm i more-maps
Usage
BidirectionalMap
A map that allows bidirectional lookup between keys and values. It extends the built-in Map
class.
import { BidirectionalMap } from "more-maps"
const map = new BidirectionalMap<string, number>()
map.set("one", 1)
map.set("two", 2)
console.log(map.get("one")) // 1
console.log(map.reverse.get(2)) // "two"
console.log(map.reverse.reverse === map) // true
Be aware that if you set the same value twice to a different key, the second key will overwrite the first one in the reverse map. So make sure they do not conflict. If you want to avoid this, use the BidirectionalMultiMap.
MultiMap
A map that allows multiple values per key. It stores the values in an array. It provides methods to add, retrieve, and delete values.
import { MultiMap } from "more-maps"
const map = new MultiMap<string, number>()
map.add("one", 1)
map.add("one", 2)
map.add("one", 3)
map.add("two", 4)
console.log(map.getAll("one")) // [1, 2, 3]
console.log(map.get("one")) // 1
console.log(map.get("two")) // 4
map.delete("one", 2)
console.log(map.getAll("one")) // [1, 3]
map.delete("one")
console.log(map.getAll("one")) // []
console.log(map.get("one")) // undefined
BidirectionalMultiMap
A bidirectional version of the MultiMap. It allows bidirectional lookup between keys and values, and also supports adding and deleting values.
import { BidirectionalMultiMap } from "more-maps"
const map = new BidirectionalMultiMap<string, number>()
map.add("one", 1)
map.add("one", 2)
map.add("two", 3)
map.add("three", 2)
console.log(map.getAll("one")) // [1, 2]
console.log(map.reverse.getAll(2)) // ["one", "three"]
map.delete("one", 2)
console.log(map.getAll("one")) // [1]
console.log(map.reverse.getAll(2)) // ["three"]
Contribute
All feedback is appreciated. Create a pull request or write an issue.