获取密钥的简单方法取决于Golang中hashmap的值

时间:2015-11-13 21:12:13

标签: go hashmap key

在Golang中给出一个具有键和值的哈希映射,在给定值的情况下检索键的最简单方法是什么?

例如Ruby等价物     key = hashMap[value]

3 个答案:

答案 0 :(得分:8)

没有内置功能可以做到这一点;你必须自己做。下面是一个适用于map[string]int的示例函数,您可以根据其他地图类型进行调整:

func mapkey(m map[string]int, value int) (key string, ok bool) {
  for k, v := range m {
    if v == value { 
      key = k
      ok = true
      return
    }
  }
  return
}

用法:

key, ok := mapkey(hashMap, value)
if !ok {
  panic("value does not exist in map")
}

答案 1 :(得分:6)

重要的问题是:你需要多少次查看价值?

如果您只需要执行一次,那么您可以迭代键值对,并保留与该值匹配的键(或键)。

如果你不得不经常查找,那么我建议你制作另一张有关键的地图,价值相反(假设所有的键都映射到唯一值),然后用它来查找。

答案 2 :(得分:0)

我正在处理基于比特币的服务器,并且有一个支付脚本的常量和字节代码列表。在C ++版本中,它既有代码标识符,又有另一个返回字符串版本的函数。因此,只需将原始数据作为字符串键,将字节作为值,然后反转顺序,就没有太多额外的工作。唯一让我烦恼的是重复键值。但由于这些只是真和假,重叠为零和一,所以字符串切片的第一个索引都是数字和操作码,而真值是第二个索引。

每次迭代列表以识别要执行的脚本命令将平均花费50%的测试地图元素。只有一个反向查找表要简单得多。执行脚本必须在完整的块上完成多达10,000次,因此在处理时节省内存和支付是没有意义的。