当前位置: 首页 > 知识库问答 >
问题:

在javascript中构建哈希表和完善的哈希函数

孔华池
2023-03-14

我正在使用Google Maps API,觉得除了大量的switch语句之外,还有一种更好的方法来搜索全景图像。我认为使用外部哈希表会更有效,更容易维护。每个图像都有一个唯一的panoid,我可以定义它。阅读哈希表,我相信我的说法是正确的,我可以做一个表和完善的函数,以获得我需要的数据,在恒定的时间。有没有一个很好的资源如何构建这个?我对哈希一点经验都没有。

我的逻辑是这样的:每个图像都以sometext_panoid.jpg的形式保存在一个目录中,其中sometext是一个字符串panoid是我想要的任何内容。在初始化前面提到的switch语句中的数据时,所有的切换都是根据panoID完成的,并且在那里访问其他元数据。例如:

switch(panoID) {
    case "test1":
      links.push({
        description : "TEST2",
        pano : "test2",
        heading : 70
      });
      break;
    case "test2":
      links.push({
        description : "TEST1",
        pano : "test1",
        heading : 125
      });
      links.push({
        description : "TEST3",
        pano : "test3",
        heading : 0
      });
      break;
      case "test3":
      links.push({
        description : "TEST2",
        pano : "test2",
        heading : 0
      });
      break;
  }

由于我将知道所有的panoid,并且在生成表后不需要排序、添加或更改任何内容,所以我觉得有一种方法可以生成一个完美的散列,但不知道从哪里开始。有什么提示吗?谢谢是提前一堆了

共有1个答案

柯唯
2023-03-14

实际上,简单的普通对象及其属性被实现为下面的哈希表。因此,不需要阅读哈希算法,您可以让您的JS引擎完成这项工作:

var table = {
    "test1": [
      {
        description : "TEST2",
        pano : "test2",
        heading : 70
      }
    ],
    "test2": [
      {
        description : "TEST1",
        pano : "test1",
        heading : 125
      },
      {
        description : "TEST3",
        pano : "test3",
        heading : 0
      }
    ],
    "test3": [
      {
        description : "TEST2",
        pano : "test2",
        heading : 0
      }
    ]
};

var itemstobepushed = table[panoID];
[].push.apply(links, itemstobepushed);
 类似资料:
  • 问题内容: 当大小超过maxthreshold值时,如何在哈希表或哈希表中进行重新哈希处理? 是否所有对都已复制到新的存储桶阵列中? 编辑: 重新哈希后,同一存储桶(位于链接列表中)中的元素会发生什么情况?我的意思是说,他们在重新哈希处理后会留在同一个桶中吗? 问题答案: 问题中的最大阈值称为负载系数。 建议负载系数约为0.75。负载因子定义为(m / n),其中n是哈希表的总大小,m是在需要增加

  • keys 一个包含哈希表中查找到的键的序列。 请注意,并不是所有的哈希表都支持这个 (询问程序员一个指定的哈希表是否允许这么操作)。 <#assign h = {"name":"mouse", "price":50}> <#assign keys = h?keys> <#list keys as key>${key} = ${h[key]}; </#list> 将会输出: name = mouse

  • REDIS_HASH (哈希表)是 HSET 、 HLEN 等命令的操作对象, 它使用 REDIS_ENCODING_ZIPLIST 和 REDIS_ENCODING_HT 两种编码方式: 字典编码的哈希表 当哈希表使用字典编码时, 程序将哈希表的键(key)保存为字典的键, 将哈希表的值(value)保存为字典的值。 哈希表所使用的字典的键和值都是字符串对象。 下图展示了一个包含三个键值对的哈希

  • Hashtbl 模块 Hashtbl模块实现了一个高效的,可变的查询表。如下创建一个哈希表: # let my_hash = Hashtbl.create 123456;; val my_hash : ('_weak1, '_weak2) Hashtbl.t = <abstr> 这个123456是哈希表的初始大小。这个值可以是你对数据量的一种猜测,但是哈希表有可能会 随着数据量的增多而变大,因此

  • 哈希表 通过最简单的取模运算作为哈希算法 class HashNode(object): def __init__(self, id, data): self.id = id self.data = data self.next = None def __str__(self): return '(%d,%s)' %

  • 主要内容:Hashtable 类中的属性,Hashtable 类中的方法在 C# 中,Hashtable(哈希表) 类表示根据键的哈希代码进行组织的键(key)/值(value)对的集合,可以使用键来访问集合中的元素。也就是说当您需要使用键来访问指定元素时,可以选择使用哈希表。 Hashtable 类中的属性 下表中列出了 Hashtable 类中一些常用的属性: 属性 描述 Count 获取哈希表中包含的键值对的个数 IsFixedSize 获取一个值,用来表示哈希