From 69f9c74bcb35b146e2fa5b7115abc192685d6d71 Mon Sep 17 00:00:00 2001 From: yunxuan Date: Tue, 10 Sep 2024 15:08:36 +0800 Subject: [PATCH] feat(maputil): add GetValue (#243) * add maputil.GetValue * rename GetOrDefault --- docs/api/packages/maputil.md | 41 +++++++++++++++++++++++++++++++++ docs/en/api/packages/maputil.md | 41 +++++++++++++++++++++++++++++++++ maputil/map.go | 9 ++++++++ maputil/map_test.go | 19 +++++++++++++++ 4 files changed, 110 insertions(+) diff --git a/docs/api/packages/maputil.md b/docs/api/packages/maputil.md index d0510c0..b4bc9f2 100644 --- a/docs/api/packages/maputil.md +++ b/docs/api/packages/maputil.md @@ -77,6 +77,7 @@ import ( - [ConcurrentMap_Range](#ConcurrentMap_Range) - [GetOrSet](#GetOrSet) - [SortByKey](#SortByKey) +- [GetOrDefault](#GetOrDefault)
@@ -2263,4 +2264,44 @@ func main() { // Output: // map[1:a 2:b 3:c 4:d] } +``` + +### GetOrDefault + +

返回给定键的值,如果键不存在,则返回默认值。

+ +函数签名: + +```go +func GetOrDefault[K comparable, V any](m map[K]V, key K, defaultValue V) V +``` + +示例:[运行](https://go.dev/play/p/99QjSYSBdiM) + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/maputil" +) + +func main() { + m := map[int]string{ + 3: "c", + 1: "a", + 4: "d", + 2: "b", + } + + result1 := maputil.GetOrDefault(m, 1, "default") + result2 := maputil.GetOrDefault(m, 6, "default") + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // a + // default +} ``` \ No newline at end of file diff --git a/docs/en/api/packages/maputil.md b/docs/en/api/packages/maputil.md index 71f97e0..6c84405 100644 --- a/docs/en/api/packages/maputil.md +++ b/docs/en/api/packages/maputil.md @@ -77,6 +77,7 @@ import ( - [ConcurrentMap_Has](#ConcurrentMap_Has) - [ConcurrentMap_Range](#ConcurrentMap_Range) - [GetOrSet](#GetOrSet) +- [GetOrDefault](#GetOrDefault)
@@ -2279,4 +2280,44 @@ func main() { // Output: // map[1:a 2:b 3:c 4:d] } +``` + +### GetOrDefault + +

returns the value of the given key or a default value if the key is not present.

+ +Signature: + +```go +func GetOrDefault[K comparable, V any](m map[K]V, key K, defaultValue V) V +``` + +Example:[运行](https://go.dev/play/p/99QjSYSBdiM) + +```go +package main + +import ( + "fmt" + "github.com/duke-git/lancet/v2/maputil" +) + +func main() { + m := map[int]string{ + 3: "c", + 1: "a", + 4: "d", + 2: "b", + } + + result1 := maputil.GetOrDefault(m, 1, "default") + result2 := maputil.GetOrDefault(m, 6, "default") + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // a + // default +} ``` \ No newline at end of file diff --git a/maputil/map.go b/maputil/map.go index b70edbc..4f1fbf5 100644 --- a/maputil/map.go +++ b/maputil/map.go @@ -657,3 +657,12 @@ func convertMap(src reflect.Value, dst reflect.Value) error { return nil } + +// GetOrDefault returns the value of the given key or a default value if the key is not present. +// Play: https://go.dev/play/p/99QjSYSBdiM +func GetOrDefault[K comparable, V any](m map[K]V, key K, defaultValue V) V { + if v, ok := m[key]; ok { + return v + } + return defaultValue +} diff --git a/maputil/map_test.go b/maputil/map_test.go index a78b818..4a6c5f2 100644 --- a/maputil/map_test.go +++ b/maputil/map_test.go @@ -869,3 +869,22 @@ func TestBaseType(t *testing.T) { MapTo(tc["u64"], &number) assert.EqualValues(64, number) } + +func TestGetOrDefault(t *testing.T) { + + t.Parallel() + + assert := internal.NewAssert(t, "GetOrDefault") + + m1 := map[int]string{ + 3: "c", + 1: "a", + 4: "d", + 2: "b", + } + result1 := GetOrDefault(m1, 1, "123") + assert.Equal("a", result1) + + result2 := GetOrDefault(m1, 5, "123") + assert.Equal("123", result2) +}