Go語言的Map轉為Slice的方式如下。
方式一
下面宣告一個帶值的map m
,然後利用for迴圈分別將key與value放入slice ks
和vs
中。
// create map with values by map literal
m := map[int]string {
1: "John",
2: "Mary",
3: "Andy",
}
ks := make([]int, 0) // make empty slice
vs := make([]string, 0) // make empty slice
// loop map
for k, v := range m {
ks = append(ks, k) // put key to slice
vs = append(vs, v) // put value to slice
}
fmt.Println(ks) // [2 3 1]
fmt.Println(vs) // [Mary Andy John]
方式二
使用samber/lo套件的MapToSlice
;第一個參數為要轉換的map物件;第二個參數為轉換函式,其參數為遍歷map中的每個key-value,回傳值為要轉成的slice元素類型。
例如下面將map m
分別轉為key組成的slice keys
和value組成的slice values
。
main.go
package main
import (
"fmt"
"github.com/samber/lo"
)
func main() {
m := map[int]string{
1: "John",
2: "Mary",
3: "Andy",
}
keys := lo.MapToSlice(m, func(k int, v string) int {
return k
})
fmt.Println(keys) // [1 2 3]
values := lo.MapToSlice(m, func(k int, v string) string {
return v
})
fmt.Println(values) // [John Mary Andy]
}
執行印出以下。由於map不保證順序,所以塞入slice的key及value順序不一定。
[2 3 1]
[Mary Andy John]
沒有留言:
張貼留言