【发布时间】:2014-05-05 22:13:04
【问题描述】:
我是 Go 新手,现在我想从地图中获取任意项目;这样做的惯用方法是什么?我只能想到这样的事情:
func get_some_key(m map[int]int) int {
for k := range m {
return k
}
return 0
}
我想要这样做的原因是我正在使用地图来维护一组作业,并且使用地图我可以获得待处理的作业或在 O(1) 中删除已完成的作业。我想这应该是一个常见的要求,但在 Go 中如何做到这一点并不明显。
【问题讨论】:
-
您是否知道您尝试获取或设置的密钥的值,或者您是否尝试找到一个随机密钥或您事先不知道的某个密钥?
-
您是否在寻找具有特定值的键?如果您只是在寻找与键关联的值,则只需
m[i]。 -
你的方法看起来不错。如果 map 可以同时被两个 goroutine 访问,请使用
sync.Mutex保护检索/删除操作,这样两个 goroutine 就不会抓取相同的工作(并且因为 map 出于速度考虑,本身不是线程安全的)。 -
@dethtron5000 我不需要随机密钥或某事,我只需要给我一个地图中任何元素的密钥(如果有)
-
@twotwotwo 是的,我从maps in action 文章中看到了这一点,并且要清楚,我使用的是sync.RWMutex。
标签: dictionary go