当前位置: 首页 > 面试题库 >

在Golang中制作哈希数组

锺离玮
2023-03-14
问题内容

我是Go的新手,并且嵌套数据结构有些麻烦。以下是我需要在Golang中制作的一系列哈希值。我只是对整个必须事先声明变量类型而感到困惑。有任何想法吗?

 var Array = [
   {name: 'Tom', dates: [20170522, 20170622], images: {profile: 'assets/tom-profile', full: 'assets/tom-full'}},
   {name: 'Pat', dates: [20170515, 20170520], images: {profile: 'assets/pat-profile', full: 'assets/pat-full'}} 
    ...,
    ... ]

问题答案:

在Ruby中,所谓的“哈希”在Go中称为“映射”(将键转换为值)。

但是,Go是静态类型检查的语言。映射只能将某种类型映射为另一种类型,例如map [string] int将字符串值映射为整数。那不是你想要的。

因此,您想要的是一个结构。实际上,您需要预先定义类型。所以你会怎么做:

// declaring a separate 'Date' type that you may or may not want to encode as int. 
type Date int 
type User struct {
    Name string
    Dates []Date
    Images map[string]string
}

现在定义了该类型,您可以在另一种类型中使用它:

ar := []User{
  User{
    Name: "Tom",
    Dates: []Date{20170522, 20170622},
    Images: map[string]string{"profile":"assets/tom-profile", "full": "assets/tom-full"},
  },
  User{
    Name: "Pat",
    Dates: []Date{20170515, 20170520},
    Images: map[string]string{"profile":"assets/pat-profile", "full": "assets/pat-full"},
  },
}

请注意,我们如何将User定义为结构,将images定义为字符串到image的映射。您还可以定义单独的图像类型:

type Image struct {
  Type string // e.g. "profile"
  Path string // e.g. "assets/tom-profile"
}

然后,您将不会将Images定义为,map[string]string而是定义为[]ImageImage结构的切片。哪一种更合适取决于使用情况。



 类似资料:
  • 底层实现是hash table,一般操作复杂度是O(1),要同时操作多个field时就是O(N),N是field的数量。应用场景:土法建索引。比如User对象,除了id有时还要按name来查询。 可以有如下的数据记录: (String) user:101 -> {“id”:101,”name”:”calvin”…} (String) user:102 -> {“id”:102,”name”:”ke

  • 所以,我有一个带有数组的哈希,就像这样: 我想将它们合并到一个哈希数组中,组合相应的元素。 结果应该是这样的: 知道如何有效地做到这一点吗? 请注意,真实世界的使用场景可能包含数量可变的散列键。

  • 我正在尝试使用手指打印在我的客户端,并得到了这段代码作为一个更大的代码的一部分。 正如您所看到的,散列是显而易见的。你能告诉我如何或什么实现使用,以便我可以隐藏或任何可以掩盖散列=5382。谢谢你。

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

  • 我需要一个尽可能有效的哈希函数,对于一个使用探测(开放寻址)进行冲突解决的哈希表(实际上是一个哈希集)。表中存储的条目都是4字节的INT,在该范围内具有随机值。 我正在考虑一些比djb2更快的东西,比如 然后用我的水桶尺寸再修改一次。我想这个素数一定比我的桶大小要大,这意味着我对我的表要增长多大也有某种理智上的限制(它可能永远不会超过256个条目)。 我不需要哈希函数的任何密码学方面--只要它不是

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