如何在 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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP