为了账号安全,请及时绑定邮箱和手机立即绑定

检查映射中是否存在键作为“if 语句”条件

检查映射中是否存在键作为“if 语句”条件

Go
BIG阳 2023-07-31 16:48:43
我正在解决代码战争中的 katas 问题,并偶然发现了一种检查映射是否具有与给定键关联的值的方法。下面的代码是我自己的虚拟示例,如果函数参数等于 10,则返回(以非常低效的方式)“bar”字符串。我很难理解if这里的声明是如何运作的。func Bar(x int) string {    var m = make(map[string]int)    if x == 10 {        m["bar"] = x    }    if _, ok := m["bar"]; ok {        return "bar"    }    return "foo"}如果我的if声明看起来像这样(删除_)if ok := m["bar"];ok {代码无法运行,但我不知道为什么。我不知道这种模式是否合适以及其背后的机制。目前它看起来像是一个肮脏的把戏,因为if它只计算布尔表达式。所以我的理论是,不知_何故,if声明认为它有一个布尔条件,但如果有人引导我走向正确的方向,我将非常感激
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

有两种方法可以从地图中读取值。首先是:

x:=m[key]

这将检查 是否m有值key,如果有,它将分配该值的副本x。如果不是,x则其值为零。因此,如果m是一个,比如说,map[int]int,那么x如果 key 不在映射中,则值为 0。m这与给定键为 0没有区别。

您可以使用第二种形式的地图读取:

x, ok:=m[key]

如果m具有值key,则这将设置x为该值,并设置ok为 true。如果m没有值key,则这将设置x为零值,并设置okfalse

在 中if _,ok:=m["bar"]; ok_忽略从映射返回的值,但现在可以从 的值得知映射是否包含该键ok。if 语句首先评估赋值,然后检查条件,这里是布尔值ok

简而言之,if 语句检查键是否在映射中,如果是,则执行某些操作。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信