Javascript 散列两个数字

标签 javascript hash lookup

我在 javascript 中有两个数字。

它们是积分坐标。

我还有一个对象:var regions = {};

我希望能够尽快访问特定对象。

例如在 (5,-2) 处可能有一个对象

为这样的两个数字创建不冲突的唯一哈希值的快速方法是什么?

最佳答案

我假设您要访问的“特定对象”由 regions 上的属性引用。 JavaScript 中的对象属性由字符串名称或 Symbol 名称命名。在这种情况下,您将使用字符串。

因为它将是字符串,简单的解决方案就是创建一个字符串,然后用它查找:

var obj = regions[num1 + "," + num2];

这让 JavaScript 引擎能够很好地查找属性。 JavaScript 引擎在这方面非常好(阅读:快速),因为它们必须很多

引擎如何进行查找在某种程度上取决于 regions 对象的创建方式。只要有可能,现代引擎将创建实际上是微类的对象,并提供非常快速的属性名称解析。如果你做了某些事情(比如在其中一个属性上使用 delete),现代引擎可能会退回到使用哈希查找的“字典”模式。这仍然很快,只是没有优化后的形式那么快。

我怀疑您会找到更快的方法。理论上,如果 region 是一个连续数组,其中元素引用连续数组,则 JavaScript 引擎可以隐藏这些真正的数组,并且您的示例数字之一是负数,这将阻止真正的数组被用过的。而且您仍然会进行两次查找(第一个数字,然后是第二个),并且不能保证它会更快。这肯定会更复杂。

正如您所说,您会收到零散的信息,我会使用一个简单的复合字符串键,直到/除非您对该解决方案有性能问题,然后看看尝试让连续的数组发生在你的目标引擎上(将那些负索引转换成其他东西,这可能会有问题)。我怀疑您会发现查找是所有瓶颈。

关于Javascript 散列两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100572/

相关文章:

javascript - 轮播 - 停止横向滚动

javascript - 如何将选择下拉选项的值与 div 类进行比较以切换它的可见性?

Perl,0 的串联

javascript - 如何使用 jquery 或 javascript 从 php 数组中获取值?

javascript - 在Sap.m.Select中bindAggregation之后使用insertItem

hash - Redis - 非常大的单条记录(哈希表)

C 在调整哈希表大小时遇到​​问题

c - C 中的方法查找

Mongodb 加入从 String 到 ObjectId 的 _id 字段

c++ - C++ 中的从属名称与非从属名称