在 Julia 中构建遍历多个索引的数组

Build array iterating over multiple indices in Julia

我想用更优雅的语法得到如下结果

julia> collect(Iterators.flatten([[(x,y) for y in 1:x] for x in 1:3]))
6-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 1)
 (2, 2)
 (3, 1)
 (3, 2)
 (3, 3)

我尝试了类似 [(x,y) for y in 1:x, x in 1:3] 的方法,但我得到了 ERROR: UndefVarError: x not defined

像这样颠倒变量的顺序:

julia> [(x,y) for x in 1:3 for y in 1:x]
6-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (2, 1)
 (2, 2)
 (3, 1)
 (3, 2)
 (3, 3)

我以前也一直在努力记住变量顺序。直到有一天有人告诉我一个秘密:只要把for循环在列表推导中的顺序照常处理,只是把body移到了前面。

例如,在正常顺序中我们写:

for x in 1:3
    for y in 1:x
        # do sth
    end
end

现在我们将 body 部分移到前面,我们有 [ #= do sth =# for x in 1:3 for y in 1:x]