網頁

2023/6/20

Golang convert Slice to Map

Go slice轉成map的方式如下。



方式一

建立一個map物件,然後用for迴圈遍歷slice的同時把值塞入map並決定使用的key。例如下面遍歷Employeeslice,以Employee.Id為key放入map中。

main.go

package main

import (
    "fmt"
)

type Employee struct {
    Id   int
    Name string
}

func main() {
    emps := []Employee{
        {1, "john"},
        {2, "mary"},
        {3, "tony"},
    }

    empMap := make(map[int]Employee)

    for _, emp := range emps {
        empMap[emp.Id] = emp
    }

    fmt.Println(empMap) // map[1:{1 john} 2:{2 mary} 3:{3 tony}]
}

方式二

使用samber/lo套件的KeyBy;第一個參數為要轉換的slice;第二個參數為轉換函式,其參數為遍歷slice的每一個元素,回傳值為當下遍歷元素放入map的key型別。

main.go


package main

import (
    "fmt"

    "github.com/samber/lo"
)

type Employee struct {
    Id   int
    Name string
}

func main() {
    emps := []Employee{
        {1, "john"},
        {2, "mary"},
        {3, "tony"},
    }

    empMap := lo.KeyBy(emps, func(emp Employee) int {
        return emp.Id
    })

    fmt.Println(empMap) // map[1:{1 john} 2:{2 mary} 3:{3 tony}]
}


沒有留言:

張貼留言