我们可以使用 Array 的 zip
方法同时迭代两个数组,例如:
@budget.zip(@actual).each do |budget, actual|
...
end
是否可以迭代三个数组?我们可以使用 transpose
方法来做同样的事情吗?
最佳答案
>> [1,2,3].zip(["a","b","c"], [:a,:b,:c]) { |x, y, z| p [x, y, z] }
[1, "a", :a]
[2, "b", :b]
[3, "c", :c]
transpose
也可以,但与 zip
不同的是,它会立即创建一个新数组:
>> [[1,2,3], ["a","b","c"], [:a,:b,:c]].transpose.each { |x, y, z| p [x, y, z] }
[1, "a", :a]
[2, "b", :b]
[3, "c", :c]
注意事项:
您不需要
each
和 zip ,它需要一个 block 。函数表达式也是可能的。例如,使用
map
:sums = xs.zip(ys, zs).map { |x, y, z| x + y + z }
。对于任意数量的数组,您可以执行
xss[0].zip(*xss[1..-1])
或简单地xss.transpose
.
关于ruby - 是否可以同时迭代三个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17069788/