如果我有一张地图 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 包中是否有函数,或者如果必须这样做,这是最好的代码吗?
抱歉不行。没有内置的方法可以做到这一点。
作为旁注,您可以在切片创建中省略容量参数:
v := make([]string, len(m))
容量暗示与此处的长度相同。
作为 jimt 帖子的补充:
您也可以使用append而不是明确地将值分配给它们的索引:
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用完时分配内存。
m
v
你也可以make不带容量值的切片,让append自己为自己分配内存。
make