help?> fill
search: fill fill! finally findall filter filter! filesize filemode FileSyntax FileSchema isfile CSVFile @__FILE__ CSVFileSyntax fieldtype fieldname
fill(x, dims)
Create an array filled with the value x. For example, fill(1.0, (5,5)) returns a 5×5 array of floats, with each element initialized to 1.0.
...
If x is an object reference, all elements will refer to the same object. fill(Foo(), dims) will return an array filled with the result of evaluating
Foo() once.
请注意最后一段:
如果
x
是对象引用,则所有元素都将引用同一对象。fill(Foo(), dims)
将返回一个数组,其中填充了一次对Foo()
求值的结果。
所以我想知道, 是如何构造一个n
个唯一对象的数组?
例如说我想要3个空的,分开的字典的数组。
答案 0 :(得分:5)
我能想到的最好的方法是使用理解力:
julia> ds = [Dict() for _ in 1:3]
2-element Array{Dict{Any,Any},1}:
Dict()
Dict()
Dict()
这是最好的方法吗?谢谢!
答案 1 :(得分:3)
这是我可以想到的两种选择:
julia> map(_ -> Dict(), 1:3)
3-element Array{Dict{Any,Any},1}:
Dict()
Dict()
Dict()
julia> (_ -> Dict()).(1:3)
3-element Array{Dict{Any,Any},1}:
Dict()
Dict()
Dict()
但是在实践中,我会按照您的建议理解。
答案 2 :(得分:1)
如文档中所述
fill(Foo(),dims)将返回一个数组,其中填充了 一次评估Foo()
因此,这就是您要避免的事情:
julia> a = fill(Dict(), 4)
4-element Array{Dict{Any,Any},1}:
Dict()
Dict()
Dict()
Dict()
julia> a[1]["foo"] = :bar
:bar
julia> a
4-element Array{Dict{Any,Any},1}:
Dict("foo" => :bar)
Dict("foo" => :bar)
Dict("foo" => :bar)
Dict("foo" => :bar)
因此,方法是使用话语中所述的列表理解:
julia> a = [Dict() for i in 1:4]
4-element Array{Dict{Any,Any},1}:
Dict()
Dict()
Dict()
Dict()
julia> a[1]["foo"] = :bar
:bar
julia> a
4-element Array{Dict{Any,Any},1}:
Dict("foo" => :bar)
Dict()
Dict()
Dict()
相关问题: https://discourse.julialang.org/t/initialize-array-of-arrays/11610/4