【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转为slice

func 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

回到顶部