如何在 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

更新于: 2022年2月21日

796 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告