【go】go语言,如何把map转为slice?
//把类似slice的map转为slice
func MapToSlice(input interface{}) []interface{} {
output := []interface{}{}
for i,l := 0,len(input); i < l; i++ {
output = append(output,input[i])
}
return output
}
//用法
got := MapToSlice(map[int]string{
0:"haha",
1:"heihei",
2:"hopho",
})
fmt.Println(got)
以上是错误的写法,因为len
不能接收interface{}
作为参数,也不能用input[i]
的方式取值。
以上的函数如果input
的类型改为map[int]interface{}
,则可以,但是编译时又会报传入的参数类型不正确
当你以 interface 接受的时候,你对原来的值就一无所知了,但可以使用反射来获取它的值。
延用你的写法可以这样写:
//把类似slice的map转为slicefunc MapToSlice(input interface{}) []interface{} {
v := reflect.ValueOf(input)
keys := v.MapKeys()
output := []interface{}{}
for i, l := 0, v.Len(); i < l; i++ {
output = append(output, v.MapIndex(keys[i]))
}
return output
}
但需要注意的是,这里返回的值是 reflect.Value 类型
func MapToSlice(input map[interface{}]interface{}) []interface{} {output := []interface{}{}
for key,value:=range input {
fmt.Println(key,value)
output = append(output,value)
}
return output
}
这样试试
目前只能遍历,建议使用并发安全的gmap包,可以通过Keys()和Values()方法返回对应的键/值slice。
gmap包API文档:https://godoc.org/github.com/...
是要把什么转成slice,是key还是value,说清楚,大哥。
回答
以上是 【go】go语言,如何把map转为slice? 的全部内容, 来源链接: www.h5w3.com/114164.html