Dictionary 如何更改地图的默认值
我读到Go将值设置为地图中数据类型的“零值”。我想知道是否有一种简单的方法可以设置不同的默认值,类似于在Python中使用defaultdict 为了澄清这个问题,下面是我试图实现的Python代码:Dictionary 如何更改地图的默认值,dictionary,go,Dictionary,Go,我读到Go将值设置为地图中数据类型的“零值”。我想知道是否有一种简单的方法可以设置不同的默认值,类似于在Python中使用defaultdict 为了澄清这个问题,下面是我试图实现的Python代码: from collections import defaultdict prices=defaultdict(lambda:5) # default value 5 instead of 0 prices[2]=0 prices[3]=0 print(prices) # {2: 0, 3: 0}
from collections import defaultdict
prices=defaultdict(lambda:5) # default value 5 instead of 0
prices[2]=0
prices[3]=0
print(prices) # {2: 0, 3: 0}
for i,p in enumerate ([0,1,2,3,4,5,6]):
if p>prices[i]:
# if price is greater than existing price, compare to 5 when it doesn't exist
prices[i]=p
print(prices) # {0: 5, 1: 5, 2: 2, 3: 3, 4: 5, 5: 5, 6: 6})
您不能更改零值,但一种简单的模拟方法是将元素访问封装到一个函数中,如果找不到键,该函数可以返回您想要的任何内容:
var m = map[int]string{
1: "one",
2: "two",
}
func get(key int) string {
if v, ok := m[key]; ok {
return v
}
return "<missing>"
}
输出(在上尝试):
然后使用它:
m := mymap{
m: map[int]string{
1: "one",
2: "two",
},
def: "<missing>",
}
fmt.Println(m.get(1))
fmt.Println(m.get(2))
fmt.Println(m.get(3))
m:=mymap{
m:map[int]字符串{
1:"一",,
二:"两个",,
},
定义:“,
}
fmt.Println(m.get(1))
fmt.Println(m.get(2))
fmt.Println(m.get(3))
输出是相同的。请在上尝试此选项。No…………无法更改默认值,这会使代码更具可预测性。@BurakSerdar“更具可预测性”无疑是一个夸张的说法。一般来说,Go中完全没有魔术、自定义或覆盖默认行为。如果某些东西在Go中有一些默认行为,通常不值得探索改变它的方法,因为根本没有。
one
two
<missing>
type mymap struct {
m map[int]string
def string
}
func (m mymap) get(key int) string {
if v, ok := m.m[key]; ok {
return v
}
return m.def
}
m := mymap{
m: map[int]string{
1: "one",
2: "two",
},
def: "<missing>",
}
fmt.Println(m.get(1))
fmt.Println(m.get(2))
fmt.Println(m.get(3))