【问题标题】:Using tuple as a key in a dictionary in javascript在javascript中使用元组作为字典中的键
【发布时间】:2020-06-17 11:33:37
【问题描述】:

在 python 中,我有一个随机字典,我在其中使用 元组作为键,每个都映射到某个值。

样本

Random_Dict = {
    (4, 2): 1,
    (2, 1): 3,
    (2, 0): 7,
    (1, 0): 8
}

上例中的键:(4,2) 值:1

我正在尝试在 Javascript 世界中复制它

这是我想出来的

const randomKeys = [[4, 2], [2, 1], [2, 0], [1, 0] ]

const randomMap = {}

randomMap[randomKeys[0]] = 1
randomMap[randomKeys[1]] = 3
randomMap[randomKeys[2]] = 7
randomMap[randomKeys[3]] = 8
randomMap[[1, 2]] = 3

我想知道这是否是最有效的方法。我几乎想知道我是否应该 做一些事情,比如在一个变量中保存两个数字,这样我就可以有一个 JS 中 1:1 映射的字典。寻找建议和解决方案 更好

【问题讨论】:

  • 请注意,实际密钥例如[1, 2] 将是 "1,2";非字符串键被字符串化。
  • 你想要什么数据结构?
  • @NinaScholz in python 我可以有一个使用元组作为键的字典。这就是我要找的
  • 对于这样的事情,我通常发现创建一个像“TupleKeyDict”这样的类会更好,它带有 add/get 方法来模仿你在 python 中得到的行为。
  • tuple 不是 javascript 类型。你知道它的等价物吗?

标签: javascript python


【解决方案1】:

您可以使用Map映射 2 个任意值的集合。在下面的 sn-p 中,键可以是 'tuples' (1) 或任何其他数据类型,值也可以是:

const values = [
  [ [4, 2], 1],
  [ [2, 1], 3],
  [ [2, 0], 7],
  [ [1, 0], 9],
];

const map = new Map(values);


// Get the number corresponding a specific 'tuple'
console.log(
  map.get(values[0][0]) // should log 1
);

// Another try:
console.log(
  map.get(values[2][0]) // should log 7
);

请注意,键相等检查是通过引用完成的,而不是通过值等价。因此,对于上述示例,以下日志 undefined,尽管给定的“键”也是一个形状为 [4, 2] 的数组,就像其中一个 Map 键一样:

console.log(map.get([4, 2]));

(1) 从技术上讲,Javascript 中不存在元组。最接近的是一个有 2 个值的数组,正如我在示例中使用的那样。

【讨论】:

  • 看起来不错,我想知道为什么我的问题被否决了。我没有问任何问题,我什至提供了我的解决方案。
  • 我投了赞成票,我对 3 元组有同样的问题,这个解决方案有效!
【解决方案2】:

你可以这样做:

const randomKeys = {
    [[4, 2]]: 1,
    [[2, 1]]: 3,
    [[2, 0]]: 7,
    [[1, 0]]: 8
}
console.log(randomKeys[ [4,2] ]) // 1 

objects 属性中的[] 用于动态属性分配。所以你可以在里面放一个数组。所以你的属性会变成[ [4,2] ],你的对象键是[4,2]

【讨论】:

  • 这很 hacky,但也很酷。
猜你喜欢
  • 2010-11-28
  • 1970-01-01
  • 2020-09-25
  • 2019-02-12
  • 2011-12-25
  • 2012-02-20
  • 2014-07-30
  • 2010-10-31
  • 2019-10-25
相关资源
最近更新 更多