从地图中获取任意键/项

新手上路,请多包涵

我是 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 许可协议

阅读 379
1 个回答

可以讨论从哈希表中获取任意键是否是一个常见的需求。其他语言映射实现通常缺少此功能(例如 C# 中的字典

然而,您的解决方案可能是最快的,但是您将得到一个您无法控制的伪随机算法。虽然当前的实现使用伪随机算法,但 Go 规范 并不能保证它实际上是随机的,只是不能保证它是可预测的:

未指定地图上的迭代顺序,并且不保证从一次迭代到下一次迭代是相同的。

如果您想更好地控制随机化,您还可以使用您选择的随机化( math/randcrypto/rand )并行保留地图中包含的更新值(或键)切片 --- 对于更极端的情况)获取存储在切片中随机选择的索引处的值。

原文由 ANisus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题