为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
月关宝盒 2021-11-22 15:54:52
给定一个 Golang 中的哈希图,它有一个键和一个值,检索给定值的键的最简单方法是什么?例如,Ruby 等价物将是 key = hashMap.key(value)
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

没有内置函数可以做到这一点;你必须自己做。下面是一个适用于 的示例函数,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")

}


查看完整回答
反对 回复 2021-11-22
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

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

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

如果您必须经常进行查找,那么我建议您制作另一个具有键值的映射(假设所有键都映射到唯一值),然后使用它进行查找。


查看完整回答
反对 回复 2021-11-22
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2021-11-22
  • 3 回答
  • 0 关注
  • 452 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信