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")
}
TA贡献1995条经验 获得超2个赞
重要的问题是:您需要查找多少次值?
如果您只需要执行一次,那么您可以遍历键、值对并保留与值匹配的键(或键)。
如果您必须经常进行查找,那么我建议您制作另一个具有键值的映射(假设所有键都映射到唯一值),然后使用它进行查找。
TA贡献1876条经验 获得超5个赞
我正在基于比特币的服务器上工作,并且有支付脚本的常量和字节码列表。在 C++ 版本中,它既有带有代码的标识符,又有另一个返回字符串版本的函数。因此,仅采用原始操作码作为字符串键和字节作为值,然后颠倒顺序实际上并没有太多额外的工作。唯一让我烦恼的是值上的重复键。但由于这些只是真假,重叠零和一,字符串切片的所有第一个索引都是数字和操作码,真值是第二个索引。
每次迭代列表以识别要执行的脚本命令平均会花费 50% 的被测试地图元素。只有一个反向查找表要简单得多。在一个完整的块上执行脚本可能多达 10,000 次,因此节省内存并支付处理费用是没有意义的。
- 3 回答
- 0 关注
- 452 浏览
添加回答
举报