// A map with a default value. Great for counting or binnings things by key. | |
export class DefaultMap<K, V> extends Map<K, V> { | |
private initfn: ()=>V; | |
// Accepts a function that returns the dict's default value, an empty Array for example. | |
constructor(fn: ()=>V) { | |
super(); | |
this.initfn = fn; | |
} | |
get(key: K): V { | |
if (!this.has(key)) { | |
this.set(key, this.initfn()); | |
} | |
return super.get(key)!; | |
} | |
} |