在 Golang 中如何检查 map 中是否存在某个键?
go programmingserver side programmingprogramming更新于 2025/5/27 12:37:17
我们知道 Go 中的 map 包含键值对。很多时候我们想知道某个键是否存在于映射中,在这种情况下,我们有两种选择。
第一种方法非常简单,因为在这种方法中,我们基本上在 range 子句的帮助下迭代映射,然后将每个键与我们要检查是否可用的键进行比较。
第二种方法要好一些,因为我们使用 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 的映射,其中包含 string 数据类型的键和 integer 数据类型的 value。
然后我们在 for 循环中使用 range 子句来迭代映射中存在的所有键,在该循环中,我们迭代键,然后将每个键与我们要检查的键进行比较。
不建议使用上述方法,因为映射的大小可能大得多,这反过来会增加解决方案的时间复杂度。
输出
如果我们使用命令 go run main.go 运行上述代码,那么我们将在终端。
No key named naina is present in the map map[deepak:8 mukul:10 mayank:9]
更好的方法是使用 if 语法来检查映射中是否存在特定值。
示例 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