1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

feat: add ToMap function

This commit is contained in:
dudaodong
2022-07-11 10:27:38 +08:00
parent 9cd8bfb8e0
commit d06cde3fcf
2 changed files with 30 additions and 0 deletions

View File

@@ -175,6 +175,17 @@ func ToPointer[T any](value T) *T {
return &value
}
// ToMap convert a slice or an array of structs to a map
func ToMap[T any, K comparable, V any](array []T, iteratee func(T) (K, V)) map[K]V {
res := make(map[K]V, len(array))
for _, item := range array {
k, v := iteratee(item)
res[k] = v
}
return res
}
// StructToMap convert struct to map, only convert exported struct field
// map key is specified same as struct field tag `json` value
func StructToMap(value any) (map[string]any, error) {

View File

@@ -142,6 +142,25 @@ func TestToJson(t *testing.T) {
assert.Equal("{\"Name\":\"TestStruct\"}", structJsonStr)
}
func TestToMap(t *testing.T) {
assert := internal.NewAssert(t, "TestStructToMap")
type Message struct {
name string
code int
}
messages := []Message{
{name: "Hello", code: 100},
{name: "Hi", code: 101},
}
result := ToMap(messages, func(msg Message) (int, string) {
return msg.code, msg.name
})
expected := map[int]string{100: "Hello", 101: "Hi"}
assert.Equal(expected, result)
}
func TestStructToMap(t *testing.T) {
assert := internal.NewAssert(t, "TestStructToMap")