Go slice轉成map的方式如下。
方式一
建立一個map物件,然後用for迴圈遍歷slice的同時把值塞入map並決定使用的key。例如下面遍歷Employee
slice,以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}]
}
沒有留言:
張貼留言