鍍金池/ 問答/GO/ go語言,如何把map轉(zhuǎn)為slice?

go語言,如何把map轉(zhuǎn)為slice?


//把類似slice的map轉(zhuǎn)為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)

以上是錯(cuò)誤的寫法,因?yàn)?code>len不能接收interface{}作為參數(shù),也不能用input[i]的方式取值。

以上的函數(shù)如果input的類型改為map[int]interface{},則可以,但是編譯時(shí)又會(huì)報(bào)傳入的參數(shù)類型不正確

回答
編輯回答
吢涼

當(dāng)你以 interface 接受的時(shí)候,你對原來的值就一無所知了,但可以使用反射來獲取它的值。

延用你的寫法可以這樣寫:

//把類似slice的map轉(zhuǎn)為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 類型

2018年3月23日 02:15
編輯回答
孤酒

是要把什么轉(zhuǎn)成slice,是key還是value,說清楚,大哥。

2017年7月3日 22:36
編輯回答
話寡

目前只能遍歷,建議使用并發(fā)安全的gmap包,可以通過Keys()和Values()方法返回對應(yīng)的鍵/值slice。
gmap包API文檔:https://godoc.org/github.com/...

2017年5月20日 09:30
編輯回答
懶洋洋
func MapToSlice(input map[interface{}]interface{}) []interface{} {
    output := []interface{}{}
    for key,value:=range input {
        fmt.Println(key,value)
        output = append(output,value)
    }
    return output
}

這樣試試

2018年7月9日 16:59