有没有更简单/更好的方法从 Go 中的地图获取一片键?
目前我正在遍历地图并将键复制到切片:
i := 0
keys := make([]int, len(mymap))
for k := range mymap {
keys[i] = k
i++
}
原文由 Saswat Padhi 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有更简单/更好的方法从 Go 中的地图获取一片键?
目前我正在遍历地图并将键复制到切片:
i := 0
keys := make([]int, len(mymap))
for k := range mymap {
keys[i] = k
i++
}
原文由 Saswat Padhi 发布,翻译遵循 CC BY-SA 4.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 许可协议
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
5 回答2.2k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答914 阅读✓ 已解决
2 回答2.2k 阅读
例如,
为了在 Go 中高效,最小化内存分配很重要。