在javascript中从值获取密钥的有效方法

时间:2012-07-09 12:32:08

标签: javascript

首先,这个问题不是Most efficient method to get key for a value in a dict的重复,因为询问者询问了python,也因为我想讨论下面给出的解决方案是否有意义,以及是否可以解决这个问题。< / p>

所以,我们假设,我遵循以下数据结构:

{ 
   "one" : "1",
   "two" : "2",
   .
   .
   "hundred thousand" : "100000"
}

现在,我希望能够针对特定值获取密钥(假设我对不同的密钥不会有相同的值)。一种解决方案是通过迭代数据来获取密钥,但如果我们将数据构造为:

,那么效率如何成为我们的代码
 data = [
    { 
       "one" : "1",
       "two" : "2",
       .
       .
       "hundred thousand" : "100000"
    },
    { 
       "1" : "one",
       "2" : "two",
       .
       .
       "100000" : "hundred thousand"
    }
   ]

所以,现在data[0]."two"可以用来获得两个值。但是,让我们假设有一种情况我知道它的值为999并且我想知道它的关键所以要得到它的关键我会做data[1]."999"即我将使用数据[1]中的反转数据。 / p>

此解决方案可能比迭代数据以找到正确的密钥更快。你觉得怎么样?

2 个答案:

答案 0 :(得分:2)

你是正确的,迭代所有键是低效的,你建议保持反向查找哈希的方法是我见过的最常见的解决这个问题的方法。当然,最好的解决方案是设计一个不需要执行反向查找的设计。

如果你要存储少量密钥,并且不经常执行此查找,那么你可能没有O(n)成本(当然,在这种情况下,维护反向查找哈希不会伤害很多)。另一方面,如果你拥有数百万个密钥并且无法获得具有反向查找哈希值的内存,那么你可以使用像Bloom Filters这样的东西来帮助降低查找成本。

答案 1 :(得分:0)

您的问题没有一般解决方案,因为多个键可以具有相同的值。对于您的具体示例,如果您在谈论速度方面的效率,那么是的,您当前使用反向映射的解决方案是最快的方法(以存储反向映射的额外空间为代价)。 / p>