给定一个 vector z = [1, 2, 3]
,我想创建一个 vector 的 vector ,该 vector 具有z
的所有圆形排列(即zp = [[1,2,3], [3,1,2], [2,3,1]]
)。
我可以使用以下命令打印zp
的所有元素
for i in 1:length(z)
push!(z, shift!(z)) |> println
end
如何存储结果排列?注意
zp = Vector(length(z))
for i in 1:length(z)
push!(z, shift!(z))
push!(zp, z)
end
无效,因为它在
z
中存储了3次相同的 vector zp
。 最佳答案
一种方法是在推动 vector 之前将其复制:
z = [1, 2, 3];
zp = Vector();
for i in 1:length(z)
push!(z, shift!(z))
push!(zp, copy(z))
end
给我
julia> zp
3-element Array{Any,1}:
[2,3,1]
[3,1,2]
[1,2,3]
但是我倾向于在可能的情况下避免进行变异操作。所以我改写成
julia> zp = [circshift(z, i) for i=1:length(z)]
3-element Array{Array{Int64,1},1}:
[3,1,2]
[2,3,1]
[1,2,3]