【发布时间】:2019-03-08 01:04:39
【问题描述】:
由于我需要一个 Map,其中键不仅与值相关联,还与一些元数据相关联 - 例如“权重”或“timeToLive”,我试图以 class MdaMap<M, K, V> extends Map<K, AugmValue<V, M>> 这样的形式使用基于 Map 的结构。正如Implementing ES6 Map augmented with metadata in Typescript 中所回答的那样,这不是一个好方法。第二种选择是围绕 Map 的包装器对象,但感觉就像 meh。所以我想到了第三种选择:重新实现 Map。
所以我创建了一个必须保存 3 种记录的类:键、值和元数据。
class MdaMap<K, V, M> {
K 代表键,V 代表值,M 代表元数据。现在,问题:什么数据结构最好。我看到以下解决方案:
-
元组数组:
private store: [K, V, M][]; -
对象数组:
private store: {key: K, value: V, metadata: M}[] -
3 个数组:
private keys: K[]; private values: V[]; private metadata: M[];
解决方案 1. 和 2. 需要遍历数组,直到找到给定的键。不同之处似乎在于访问键、值或元数据的便利性——否则我怀疑元组在资源上更容易。
至于3。当然,我必须记住设置和删除所有三个数组中的元素,这没问题。但我想知道如果 MdaMap 位于共享对象中,keys、values 和 metadata 数组是否可能会去同步,如果同时调用 set(k: K, v: V, m: M): void 和 @ 987654331@?
您认为最好的方法是什么?为什么?
【问题讨论】:
标签: arrays typescript dictionary