在 Golang 中如何检查 map 中是否存在某个键?

go programmingserver side programmingprogramming更新于 2025/5/27 12:37:17

我们知道 Go 中的 ma​​p 包含键值对。很多时候我们想知道某个键是否存在于映射中,在这种情况下,我们有两种选择。

  • 第一种方法非常简单,因为在这种方法中,我们基本上在 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

相关文章