mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-15 10:12:29 +08:00
feat: add ToMap function
This commit is contained in:
@@ -175,6 +175,17 @@ func ToPointer[T any](value T) *T {
|
|||||||
return &value
|
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
|
// StructToMap convert struct to map, only convert exported struct field
|
||||||
// map key is specified same as struct field tag `json` value
|
// map key is specified same as struct field tag `json` value
|
||||||
func StructToMap(value any) (map[string]any, error) {
|
func StructToMap(value any) (map[string]any, error) {
|
||||||
|
|||||||
@@ -142,6 +142,25 @@ func TestToJson(t *testing.T) {
|
|||||||
assert.Equal("{\"Name\":\"TestStruct\"}", structJsonStr)
|
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) {
|
func TestStructToMap(t *testing.T) {
|
||||||
assert := internal.NewAssert(t, "TestStructToMap")
|
assert := internal.NewAssert(t, "TestStructToMap")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user