在 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)
 }

是否有 map 的内置功能? Go 包中是否有函数,或者这是执行此操作的唯一方法?

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

阅读 308
2 个回答

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

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

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

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

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

作为 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 为自己分配内存。

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

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