mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-13 09:12:28 +08:00
feat(maputil): add GetValue (#243)
* add maputil.GetValue * rename GetOrDefault
This commit is contained in:
@@ -77,6 +77,7 @@ import (
|
|||||||
- [ConcurrentMap_Range](#ConcurrentMap_Range)
|
- [ConcurrentMap_Range](#ConcurrentMap_Range)
|
||||||
- [GetOrSet](#GetOrSet)
|
- [GetOrSet](#GetOrSet)
|
||||||
- [SortByKey](#SortByKey)
|
- [SortByKey](#SortByKey)
|
||||||
|
- [GetOrDefault](#GetOrDefault)
|
||||||
|
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
@@ -2263,4 +2264,44 @@ func main() {
|
|||||||
// Output:
|
// Output:
|
||||||
// map[1:a 2:b 3:c 4:d]
|
// map[1:a 2:b 3:c 4:d]
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### <span id="GetOrDefault">GetOrDefault</span>
|
||||||
|
|
||||||
|
<p>返回给定键的值,如果键不存在,则返回默认值。</p>
|
||||||
|
|
||||||
|
<b>函数签名:</b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func GetOrDefault[K comparable, V any](m map[K]V, key K, defaultValue V) V
|
||||||
|
```
|
||||||
|
|
||||||
|
<b>示例:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/99QjSYSBdiM)</span></b>
|
||||||
|
|
||||||
|
```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
|
||||||
|
}
|
||||||
```
|
```
|
||||||
@@ -77,6 +77,7 @@ import (
|
|||||||
- [ConcurrentMap_Has](#ConcurrentMap_Has)
|
- [ConcurrentMap_Has](#ConcurrentMap_Has)
|
||||||
- [ConcurrentMap_Range](#ConcurrentMap_Range)
|
- [ConcurrentMap_Range](#ConcurrentMap_Range)
|
||||||
- [GetOrSet](#GetOrSet)
|
- [GetOrSet](#GetOrSet)
|
||||||
|
- [GetOrDefault](#GetOrDefault)
|
||||||
|
|
||||||
<div STYLE="page-break-after: always;"></div>
|
<div STYLE="page-break-after: always;"></div>
|
||||||
|
|
||||||
@@ -2279,4 +2280,44 @@ func main() {
|
|||||||
// Output:
|
// Output:
|
||||||
// map[1:a 2:b 3:c 4:d]
|
// map[1:a 2:b 3:c 4:d]
|
||||||
}
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### <span id="GetOrDefault">GetOrDefault</span>
|
||||||
|
|
||||||
|
<p>returns the value of the given key or a default value if the key is not present.</p>
|
||||||
|
|
||||||
|
<b>Signature:</b>
|
||||||
|
|
||||||
|
```go
|
||||||
|
func GetOrDefault[K comparable, V any](m map[K]V, key K, defaultValue V) V
|
||||||
|
```
|
||||||
|
|
||||||
|
<b>Example:<span style="float:right;display:inline-block;">[运行](https://go.dev/play/p/99QjSYSBdiM)</span></b>
|
||||||
|
|
||||||
|
```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
|
||||||
|
}
|
||||||
```
|
```
|
||||||
@@ -657,3 +657,12 @@ func convertMap(src reflect.Value, dst reflect.Value) error {
|
|||||||
|
|
||||||
return nil
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -869,3 +869,22 @@ func TestBaseType(t *testing.T) {
|
|||||||
MapTo(tc["u64"], &number)
|
MapTo(tc["u64"], &number)
|
||||||
assert.EqualValues(64, 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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user