我正在解決代碼戰(zhàn)爭中的 katas 問題,并偶然發(fā)現(xiàn)了一種檢查映射是否具有與給定鍵關(guān)聯(lián)的值的方法。下面的代碼是我自己的虛擬示例,如果函數(shù)參數(shù)等于 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聲明認為它有一個布爾條件,但如果有人引導(dǎo)我走向正確的方向,我將非常感激
1 回答

撒科打諢
TA貢獻1934條經(jīng)驗 獲得超2個贊
有兩種方法可以從地圖中讀取值。首先是:
x:=m[key]
這將檢查 是否m
有值key
,如果有,它將分配該值的副本x
。如果不是,x
則其值為零。因此,如果m
是一個,比如說,map[int]int,那么x
如果 key 不在映射中,則值為 0。m
這與給定鍵為 0沒有區(qū)別。
您可以使用第二種形式的地圖讀?。?/p>
x, ok:=m[key]
如果m
具有值key
,則這將設(shè)置x
為該值,并設(shè)置ok
為 true。如果m
沒有值key
,則這將設(shè)置x
為零值,并設(shè)置ok
為false
。
在 中if _,ok:=m["bar"]; ok
,_
忽略從映射返回的值,但現(xiàn)在可以從 的值得知映射是否包含該鍵ok
。if 語句首先評估賦值,然后檢查條件,這里是布爾值ok
。
簡而言之,if 語句檢查鍵是否在映射中,如果是,則執(zhí)行某些操作。
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消