mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-11 00:02:28 +08:00
feat: add ToMapToSlice function
This commit is contained in:
@@ -189,7 +189,7 @@ func ToPointer[T any](value T) *T {
|
|||||||
return &value
|
return &value
|
||||||
}
|
}
|
||||||
|
|
||||||
// ToMap convert a slice or an array of structs to a map
|
// ToMap convert a slice or an array of structs to a map based on iteratee function
|
||||||
func ToMap[T any, K comparable, V any](array []T, iteratee func(T) (K, V)) map[K]V {
|
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))
|
res := make(map[K]V, len(array))
|
||||||
for _, item := range array {
|
for _, item := range array {
|
||||||
@@ -230,6 +230,17 @@ func StructToMap(value any) (map[string]any, error) {
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MapToSlice convert a map to a slice based on iteratee function
|
||||||
|
func MapToSlice[T any, K comparable, V any](aMap map[K]V, iteratee func(K, V) T) []T {
|
||||||
|
res := make([]T, 0, len(aMap))
|
||||||
|
|
||||||
|
for k, v := range aMap {
|
||||||
|
res = append(res, iteratee(k, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
// ColorHexToRGB convert hex color to rgb color
|
// ColorHexToRGB convert hex color to rgb color
|
||||||
func ColorHexToRGB(colorHex string) (red, green, blue int) {
|
func ColorHexToRGB(colorHex string) (red, green, blue int) {
|
||||||
colorHex = strings.TrimPrefix(colorHex, "#")
|
colorHex = strings.TrimPrefix(colorHex, "#")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package convertor
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/duke-git/lancet/v2/internal"
|
"github.com/duke-git/lancet/v2/internal"
|
||||||
@@ -160,7 +161,7 @@ func TestToJson(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestToMap(t *testing.T) {
|
func TestToMap(t *testing.T) {
|
||||||
assert := internal.NewAssert(t, "TestStructToMap")
|
assert := internal.NewAssert(t, "TestToMap")
|
||||||
|
|
||||||
type Message struct {
|
type Message struct {
|
||||||
name string
|
name string
|
||||||
@@ -190,10 +191,22 @@ func TestStructToMap(t *testing.T) {
|
|||||||
100,
|
100,
|
||||||
}
|
}
|
||||||
pm, _ := StructToMap(p)
|
pm, _ := StructToMap(p)
|
||||||
var expected = map[string]any{"name": "test"}
|
|
||||||
|
expected := map[string]any{"name": "test"}
|
||||||
assert.Equal(expected, pm)
|
assert.Equal(expected, pm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMapToSlice(t *testing.T) {
|
||||||
|
assert := internal.NewAssert(t, "TestMapToSlice")
|
||||||
|
|
||||||
|
aMap := map[string]int{"a": 1, "b": 2, "c": 3}
|
||||||
|
result := MapToSlice(aMap, func(key string, value int) string {
|
||||||
|
return key + ":" + strconv.Itoa(value)
|
||||||
|
})
|
||||||
|
|
||||||
|
assert.Equal([]string{"a:1", "b:2", "c:3"}, result)
|
||||||
|
}
|
||||||
|
|
||||||
func TestColorHexToRGB(t *testing.T) {
|
func TestColorHexToRGB(t *testing.T) {
|
||||||
colorHex := "#003366"
|
colorHex := "#003366"
|
||||||
r, g, b := ColorHexToRGB(colorHex)
|
r, g, b := ColorHexToRGB(colorHex)
|
||||||
|
|||||||
Reference in New Issue
Block a user