2013-06-12 48 views

回答

28
>> [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] 

注:

  • 你不需要eachzip,它需要一个块。

  • 函数表达式也是可能的。例如,使用mapsums = xs.zip(ys, zs).map { |x, y, z| x + y + z }

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

+3

** HEAD EXPLODE ** –

+0

非常感谢您的帮助。 –

+0

+1通过'zip','transpose'或内置集合操作的数组操作,在Ruby中是超级强大的工具。你可以快速地处理大量数据。 –

相关问题