我可以:
_, ok := some_go_map[a_key]
Run Code Online (Sandbox Code Playgroud)
测试密钥的存在.
但是我被Python的dict的setdefault方法所破坏(如果一个键没有在"map"[dict == associative array]中设置值,将它设置为给定的默认值,然后得到它;否则只是得到).
想知道Go中是否有一些成语可以达到同样的目的?
注意,Go的默认行为是在查找键丢失时返回值类型的" 零值 "(例如,0
或""
),因此如果您想要的默认值恰好是那个,那么您已经完成了设置.
重复Buddy和larsmans的答案,这里的代码将一个新方法附加到命名Dict
类型,因此您可以使用d[key]
Go的内置行为或d.SetDefault(key, val)
-
http://play.golang.org/p/5SIJSWNWO7
package main
import "fmt"
type Dict map[string]float64
func (d Dict) SetDefault(key string, val float64) (result float64) {
if v, ok := d[key]; ok {
return v
} else {
d[key] = val
return val
}
}
func main() {
dd := Dict{}
dd["a"] = 3
fmt.Println(dd.SetDefault("a", 1))
fmt.Println(dd.SetDefault("b", 2))
}
Run Code Online (Sandbox Code Playgroud)
您可以随时自行定义:
func setDefault(h map[string]int, k string, v int) (set bool, r int) {
if r, set = h[k]; !set {
h[k] = v
r = v
set = true
}
return
}
Run Code Online (Sandbox Code Playgroud)
但不,它不在stdlib中.通常,你只是内联.
归档时间: |
|
查看次数: |
3901 次 |
最近记录: |