在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ go語言,如何把map轉為slice?

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 類型

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

是要把什么轉成slice,是key還是value,說清楚,大哥。

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

目前只能遍歷,建議使用并發(fā)安全的gmap包,可以通過Keys()和Values()方法返回對應的鍵/值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