diff --git a/maputil/map.go b/maputil/map.go index c1fd3e9..c7418ef 100644 --- a/maputil/map.go +++ b/maputil/map.go @@ -289,3 +289,21 @@ func MapValues[K comparable, V any, T any](m map[K]V, iteratee func(key K, value return result } + +// HasKey checks if map has key or not. +// This function is used to replace the following boilerplate code: +// _, haskey := amap["baz"]; +// +// if haskey { +// fmt.Println("map has key baz") +// } +// +// Play: todo +func HasKey[K comparable, V any](m map[K]V, key K) bool { + _, haskey := m[key] + if haskey { + return true + } + + return false +} diff --git a/maputil/map_example_test.go b/maputil/map_example_test.go index 3d9b784..1472257 100644 --- a/maputil/map_example_test.go +++ b/maputil/map_example_test.go @@ -433,3 +433,20 @@ func ExampleMapTo() { // // {Nothin 28 123456789 {test 1}} } + +func ExampleHasKey() { + m := map[string]int{ + "a": 1, + "b": 2, + } + + result1 := HasKey(m, "a") + result2 := HasKey(m, "c") + + fmt.Println(result1) + fmt.Println(result2) + + // Output: + // true + // false +} diff --git a/maputil/map_test.go b/maputil/map_test.go index c1718e1..843d510 100644 --- a/maputil/map_test.go +++ b/maputil/map_test.go @@ -458,3 +458,17 @@ func TestMapValues(t *testing.T) { assert.Equal(expected, result) } + +func TestHasKey(t *testing.T) { + t.Parallel() + + assert := internal.NewAssert(t, "TestHasKey") + + m := map[string]int{ + "a": 1, + "b": 2, + } + + assert.Equal(true, HasKey(m, "a")) + assert.Equal(false, HasKey(m, "c")) +}