一尘不染

在 golang 中是否有一种从地图中获取值的好方法?

go

如果我有一张地图 m 有没有比这更好的方法来获取值 v 的一部分

package main
import (
  "fmt"
)

func main() {
    m := make(map[int]string)

    m[1] = "a"
    m[2] = "b"
    m[3] = "c"
    m[4] = "d"

    // Can this be done better?
    v := make([]string, len(m), len(m))
    idx := 0
    for  _, value := range m {
       v[idx] = value
       idx++
    }

    fmt.Println(v)
 }

是否有地图的内置功能?Go 包中是否有函数,或者如果必须这样做,这是最好的代码吗?


阅读 201

收藏
2021-11-26

共2个答案

一尘不染

抱歉不行。没有内置的方法可以做到这一点。

作为旁注,您可以在切片创建中省略容量参数:

v := make([]string, len(m))

容量暗示与此处的长度相同。

2021-11-26
一尘不染

作为 jimt 帖子的补充:

您也可以使用append而不是明确地将值分配给它们的索引:

m := make(map[int]string)

m[1] = "a"
m[2] = "b"
m[3] = "c"
m[4] = "d"

v := make([]string, 0, len(m))

for  _, value := range m {
   v = append(v, value)
}

请注意,长度为零(尚无元素存在),但容量(分配的空间)使用 的元素数进行初始化m。这样做append是不需要在每次切片容量v用完时分配内存。

你也可以make不带容量值的切片,让append自己为自己分配内存。

2021-11-26