给定一个 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]

08-07 21:48