从地图中获取一部分键

新手上路,请多包涵

有没有更简单/更好的方法从 Go 中的地图获取一片键?

目前我正在遍历地图并将键复制到切片:

 i := 0
keys := make([]int, len(mymap))
for k := range mymap {
    keys[i] = k
    i++
}

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

阅读 394
2 个回答

例如,

 package main

func main() {
    mymap := make(map[int]string)
    keys := make([]int, 0, len(mymap))
    for k := range mymap {
        keys = append(keys, k)
    }
}

为了在 Go 中高效,最小化内存分配很重要。

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

这是一个老问题,但这是我的两分钱。 PeterSO 的回答稍微简洁一些,但效率略低。您已经知道它有多大,所以您甚至不需要使用追加:

 keys := make([]int, len(mymap))

i := 0
for k := range mymap {
    keys[i] = k
    i++
}

在大多数情况下,它可能不会有太大的不同,但它并没有更多的工作,并且在我的测试中(使用具有 1,000,000 个随机 int64 键的地图,然后生成键数组十次each 方法),直接分配数组成员比使用 append 快 20%。

虽然设置容量消除了重新分配,但追加仍然需要做额外的工作来检查是否已达到每个追加的容量。

原文由 Vinay Pai 发布,翻译遵循 CC BY-SA 3.0 许可协议

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