从地图中获取一部分键

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


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


i := 0

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

for k := range mymap {

    keys[i] = k

    i++

}


慕沐林林
浏览 202回答 3
3回答

德玛西亚99

例如,package mainfunc main() {    mymap := make(map[int]string)    keys := make([]int, 0, len(mymap))    for k := range mymap {        keys = append(keys, k)    }}为了在 Go 中高效,最小化内存分配很重要。

墨色风雨

这是一个老问题,但这是我的两分钱。PeterSO 的回答稍微简洁一些,但效率稍低一些。您已经知道它将有多大,因此您甚至不需要使用 append:keys := make([]int, len(mymap))i := 0for k := range mymap {    keys[i] = k    i++}在大多数情况下,它可能不会有太大的不同,但它的工作量并不大,在我的测试中(使用具有 1,000,000 个随机int64键的映射,然后使用每种方法生成键的数组十次),大约是直接分配数组成员比使用 append 快 20%。尽管设置容量可以消除重新分配,但 append 仍然需要做额外的工作来检查您是否已达到每次 append 的容量。

吃鸡游戏

您还可以从包“reflect”中[]Value通过MapKeys结构方法获取类型为键的数组Value:package mainimport (    "fmt"    "reflect")func main() {    abc := map[string]int{        "a": 1,        "b": 2,        "c": 3,    }    keys := reflect.ValueOf(abc).MapKeys()    fmt.Println(keys) // [a b c]}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go