如何在 Go 语言中检查 map 中是否存在某个键?
我们知道 **Go** 中的 **map** 包含键值对。经常会出现我们需要知道某个键是否存在于 map 中的情况,在这种情况下,我们有两个可用的选项。
第一种方法非常简单,在这种方法中,我们基本上使用 **range** 语句迭代 map,然后将每个键与我们想要检查的键进行比较,以查看它是否存在。
第二种方法稍微好一些,因为我们使用 **if** 语句并结合了一些语法糖。
让我们首先看看简单方法的实际应用。
示例 1
请考虑以下代码。
package main import ( "fmt" ) func main() { m := make(map[string]int) m["mukul"] = 10 m["mayank"] = 9 m["deepak"] = 8 for key := range m { if key == "naina" { fmt.Println("Key named naina exists in the map") } } fmt.Println("No key named naina is present in the map") fmt.Println(m) }
在上面的代码中,
我们声明了一个名为 **m** 的 map,它包含数据类型为 **string** 的键和数据类型为 **integer** 的值。
然后我们使用 **for** 循环中的 **range** 语句迭代 map 中的所有键,并在该循环内,我们迭代键,然后将每个键与我们想要检查的键进行比较。
不建议使用上述方法,因为 map 的大小可能更大,这反过来会增加解决方案的时间复杂度。
输出
如果我们使用命令 **go run main.go** 运行上述代码,那么我们将在终端中获得以下输出。
No key named naina is present in the map map[deepak:8 mukul:10 mayank:9]
一个更好的方法是使用 **if** 语法来检查某个值是否存在于 map 中。
示例 2
请考虑以下代码。
package main import ( "fmt" ) func main() { m := make(map[string]int) m["mukul"] = 10 m["mayank"] = 9 m["deepak"] = 8 fmt.Println(m) if _, ok := m["naina"]; ok { fmt.Println("The key exists in the map") } else { fmt.Println("No key named naina in the map") } }
在上面的代码中,
我们只需使用 **if** 条件并检查值,就像从数组中获取值一样。
但我们不是传递索引,而是传递键,然后结果将存储在名为 **ok** 的变量中。
然后我们将 **ok** 条件附加到它,如果键存在,我们将获得结果,否则我们将获得“它不存在”。
输出
如果我们使用命令 **go run main.go** 运行上述代码,那么我们将在终端中获得以下输出。
map[mukul:10 mayank:9 deepak:8] No key named naina in the map
广告