是否可以同时迭代三个数组?

Hri*_*dar 12 ruby ruby-on-rails-3

我们可以使用Array的zip方法同时迭代两个数组,如:

@budget.zip(@actual).each do |budget, actual|
  ...
end
Run Code Online (Sandbox Code Playgroud)

可以迭代三个数组吗?我们可以使用该transpose方法做同样的事情吗?

tok*_*and 34

>> [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]
Run Code Online (Sandbox Code Playgroud)

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]
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 你不需要each拉链,它需要一个块.

  • 功能表达也是可能的.例如,使用map:sums = xs.zip(ys, zs).map { |x, y, z| x + y + z }.

  • 对于任意数量的数组,您可以做xss[0].zip(*xss[1..-1])或简单xss.transpose.

  • **HEAD EXPLODE** (4认同)