根据Golang中hashmap的值获取密钥的简单方法

根据Golang中hashmap的值获取密钥的简单方法,go,hashmap,key,Go,Hashmap,Key,如果Golang中有一个hashmap,它有一个键和一个值,那么在给定值的情况下检索键的最简单方法是什么 例如,Ruby等价物是 key=hashMap.key(value)没有内置函数来执行此操作;你必须自己做。下面是一个用于map[string]int的示例函数,您可以对其进行调整,以适应其他贴图类型: func mapkey(m map[string]int, value int) (key string, ok bool) { for k, v := range m { if

如果Golang中有一个hashmap,它有一个键和一个值,那么在给定值的情况下检索键的最简单方法是什么

例如,Ruby等价物是
key=hashMap.key(value)

没有内置函数来执行此操作;你必须自己做。下面是一个用于
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")
}

重要的问题是:您需要查找多少次该值

如果只需要执行一次,则可以迭代键、值对,并保留与值匹配的键


如果您必须经常进行查找,那么我建议您制作另一个具有键、值反转的映射(假设所有键映射到唯一值),并使用该映射进行查找

我正在开发一个基于比特币的服务器,其中有一个用于支付脚本的常量和字节码列表。在C++版本中,它既有标识符又有代码,然后又有返回字符串版本的函数。因此,只取原始值,将操作码作为字符串键,字节作为值,然后颠倒顺序,实际上不需要太多额外的工作。唯一让我恼火的是值上的重复键。但是,由于这些都是真的和假的,重叠的0和1,字符串片段的所有第一个索引都是数字和操作码,而真值是第二个索引


每次迭代列表以确定要执行的脚本命令将花费平均50%的被测试映射元素。只有一个反向查找表要简单得多。在一个完整的数据块上执行脚本可能需要多达10000次,因此在处理过程中节省内存和支付费用是没有意义的。

@hhh:没问题。记得回答你的问题。明白了。。。soI是新手,我不是Ruby专家,所以我可能遗漏了一些东西。但我认为它没有通过
值查找
键的功能。要获得与给定的
对应的
,我会这样做:
hashMap.invert[value]