在一个字典数组中为特定元素设置值会覆盖数组中所有的值。

3
我试图为字典数组中的特定位置分配特定的值,但是此赋值会覆盖数组中的所有值 - 为什么?
a = fill(Dict("example" => 0.),3)
a[1]["example"] = 1.
println(a)

''' output is

[Dict("example" => 1.0), Dict("example" => 1.0), Dict("example" => 1.0)]
1个回答

5

这是fill的预期行为,并在文档中有描述。

如果x是一个对象引用,所有元素都将引用同一个对象。

使用数组推导式

我建议使用数组推导式(array comprehension)来实现此目的。

julia> a = [Dict("example" => 0.) for _ in 1:3]
julia> a[1]["example"] = 1.                                                                                           
1.0
julia> println(a)
[Dict("example" => 1.0), Dict("example" => 0.0), Dict("example" => 0.0)]                                                                                                       

替代map方案

如果您真的不喜欢列表推导式,您可以使用map来实现相同的解决方案,通过实例化多个外观相同的字典来实现。

julia> b = map(x -> Dict("example" => 0.), 1:3)
3-element Vector{Dict{String, Float64}}:
 Dict("example" => 0.0)
 Dict("example" => 0.0)
 Dict("example" => 0.0)

julia> b[1]["example"] = 2.0
2.0

julia> println(b)
[Dict("example" => 2.0), Dict("example" => 0.0), Dict("example" => 0.0)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接