在朱

2017-08-16 24 views
0

在该推压到载体的载体是使用朱莉娅0.6在朱

说我有整数

x = Vector{Int64}[] resize!(x, 10) fill!(x, [0])

我要推到所选择的载体外载体内的向量的向量,但不能让它工作。

push!(x[1], 2) 

julia> x 
10-element Array{Array{Int64,1},1}: 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 

它最终将对推向每个向量。我在想这个错误的方式吗?有没有办法只推送一个选定的矢量?

使用某个矢量的视图并没有帮助。

a = x[1] 
push!(a, 3) 

julia> x 
10-element Array{Array{Int64,1},1}: 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 
[0, 2, 3] 

可以做到这一点吗?

+5

的问题是'fill'。通过'fill!(x,[0])'将数组初始化为'x = [[0] for i = 1:10]' –

+2

,'x'的每个元素都绑定到完全相同的矢量'[0] ':'x [1] === x [2]#=> true',所以如果你改变'[0]',所有相应绑定的内容都会改变。 – Gnimuc

+0

这是一个错误?为什么填充不能复制? –

回答

-1

`deepcopy'应该有助于获得单独的对象/数组。然而,令人惊讶的是它不起作用?!

julia> x = Vector{Int64}[]; 
julia> resize!(x, 10); 
julia> fill!(x, [0]) 
10-element Array{Array{Int64,1},1}: 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 
[0] 

julia> x = deepcopy(x) 
julia> push!(x[1], 2) 
    10-element Array{Array{Int64,1},1}: 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 
[0, 2] 

并非是我期待