From 6f48b00c88617fdb036373f1400510a6ce8fcf4e Mon Sep 17 00:00:00 2001 From: dudaodong Date: Mon, 10 Jul 2023 10:33:04 +0800 Subject: [PATCH] feat: add HasKey --- maputil/map.go | 18 ++++++++++++++++++ maputil/map_example_test.go | 17 +++++++++++++++++ maputil/map_test.go | 14 ++++++++++++++ 3 files changed, 49 insertions(+) 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")) +}