dictionary - 从 map 中获取任意键/项目

标签 dictionary go

我是 Go 新手,现在我想从 map 中获取任意项目;这样做的惯用方法是什么?我只能想到这样的事情:

func get_some_key(m map[int]int) int {
    for k := range m {
        return k
    }
    return 0
}

我想要这样做的原因是我正在使用 map 来维护一组作业,并且使用 map 我可以获得待处理的作业或在 O(1) 中删除已完成的作业。我想这应该是一个常见的要求,但在 Go 中如何做到这一点并不明显。

最佳答案

可以讨论从哈希表中获取任意键是否是常见要求。其他语言映射实现通常缺少此功能(例如。Dictionary in C#)

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

The iteration order over maps is not specified and is not guaranteed to be the same from one iteration to the next.

如果您想要更多地控制随机化,您还可以使用您选择的随机化(math/randcrypto/rand 对于更极端的情况)来获取存储在索引中的值,随机选择,在 slice 中。

关于dictionary - 从 map 中获取任意键/项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23482786/

相关文章:

go - 防止 Go 的 json.Marshal 将字符串强制转换为有效的 UTF-8 unicode?

linux - 如果绑定(bind)到特定接口(interface)然后 IP 发生变化,会发生什么情况?

go - 尝试从Redis中的列表进行LPOP时类型错误的操作

go - Go 中的 ODBC 返回空/空白记录

python - 使用 python 根据不同文件中的键列进行映射

javascript - 订购 key :value pairs of objects

c# - 从递归最小的目录中复制文件

Python:使用字典从列表中删除重复项同时保留顺序

c# - 自动字典键?

go - 协议(protocol)错误验证器.proto : File not found