亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查映射中是否存在鍵作為“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沒有區別。

您可以使用第二種形式的地圖讀?。?/p>

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 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號