Add MultiMap util
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
export class MultiMap<V, K extends unknown[]> extends Map<K[0], any> {
|
||||
multiGet(...keys: K): V | undefined {
|
||||
const firstKey = keys[0];
|
||||
const otherKeys = keys.slice(1);
|
||||
if (!this.has(firstKey)) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
if (otherKeys.length > 0) {
|
||||
return (this.get(firstKey)! as MultiMap<any, any>).multiGet(...otherKeys);
|
||||
}
|
||||
return this.get(firstKey) as V;
|
||||
}
|
||||
|
||||
multiSet(value: V, ...keys: K) {
|
||||
const firstKey = keys[0];
|
||||
const otherKeys = keys.slice(1);
|
||||
|
||||
if (otherKeys.length > 0) {
|
||||
if (!this.has(firstKey)) {
|
||||
this.set(firstKey, new MultiMap());
|
||||
}
|
||||
(this.get(firstKey) as MultiMap<any, any>)!.multiSet(value, ...otherKeys);
|
||||
} else {
|
||||
this.set(firstKey, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user