让x::Vector{Vector{T}}
。迭代每个内部向量的所有元素(即T
类型的所有元素)的最佳方法是什么?我能想到的最好的是使用单行表示法的双重迭代,即:
for n in eachindex(x), m in eachindex(x[n])
x[n][m]
end
但是我想知道是否有一个迭代器,可能在Iterators
包中,专门为此目的而设计,例如: for i in some_iterator(x) ; x[i] ; end
。
更一般地说,如何迭代任何数组数组的最内层元素(即任何维度的数组)?
答案 0 :(得分:8)
你的方式
for n in eachindex(x), m in eachindex(x[n])
x[n][m]
end
非常快。如果您想要最佳速度,请使用
for n in eachindex(x)
y = x[n]
for m in eachindex(y)
y[m]
end
end
避免了两次解除引用(第一次取消引用很难优化,因为数组是可变的,因此getindex
不纯粹)。或者,如果您不需要m
和n
,则可以使用
for y in x, for z in y
z
end
这也很快。
请注意,列主存储是无关紧要的,因为此处的所有数组都是一维的。
回答你的一般问题:
Base.Cartesian
最后,正如Dan Getz在评论中提到的那样:
using Iterators
for z in chain(x...)
z
end
也有效。然而,这有点性能损失。