我是 Go 的新手,现在我想从地图上获取任意项目;这样做的惯用方法是什么?我只能想到这样的事情:
func get_some_key(m map[int]int) int {
for k := range m {
return k
}
return 0
}
我想要的原因是我正在使用地图来维护一组作业,并且使用地图我可以在 O(1) 中获得待处理的作业或删除已完成的作业。我想这应该是一个常见的要求,但在 Go 中如何做到这一点并不明显。
原文由 chuchao333 发布,翻译遵循 CC BY-SA 4.0 许可协议
可以讨论从哈希表中获取任意键是否是一个常见的需求。其他语言映射实现通常缺少此功能(例如 C# 中的字典)
然而,您的解决方案可能是最快的,但是您将得到一个您无法控制的伪随机算法。虽然当前的实现使用伪随机算法,但 Go 规范 并不能保证它实际上是随机的,只是不能保证它是可预测的:
如果您想更好地控制随机化,您还可以使用您选择的随机化(
math/rand
或crypto/rand
)并行保留地图中包含的更新值(或键)切片---
对于更极端的情况)获取存储在切片中随机选择的索引处的值。