網頁

2021/6/26

Golang Map轉Slice

Go語言的Map轉為Slice的方式如下。


方式一

下面宣告一個帶值的map m,然後利用for迴圈分別將key與value放入slice ksvs中。

// 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]


沒有留言:

張貼留言