迭代多个数组的最佳方法是什么?

时间:2011-01-27 13:32:18

标签: ruby arrays loops

在Ruby中迭代多个数组的最佳方式(性能方面的美观和高效)是什么? 假设我们有一个数组:

a=[x,y,z]
b=['a','b','c']

我想要这个:

x a
y b
z c

感谢。

5 个答案:

答案 0 :(得分:6)

另一种方法是使用each_with_index。快速基准测试显示,这比使用zip快一点。

a.each_with_index do |item, index|
  puts item, b[index]
end

基准:

a = ["x","y","z"]
b = ["a","b","c"]

Benchmark.bm do |bm|
  bm.report("ewi") do
    10_000_000.times do
      a.each_with_index do |item, index|
        item_a = item
        item_b = b[index]
      end
    end
  end
  bm.report("zip") do
    10_000_000.times do
      a.zip(b) do |items|
        item_a = items[0]
        item_b = items[1]
      end
    end
  end
end

结果:

      user     system      total        real
ewi  7.890000   0.000000   7.890000 (  7.887574)
zip 10.920000   0.010000  10.930000 ( 10.918568)

答案 1 :(得分:3)

数组对象上的zip方法:

a.zip b do |items|
    puts items[0], items[1]
end

答案 2 :(得分:2)

>> a=["x","y","z"]
=> ["x", "y", "z"]
>> b=["a","b","c"]
=> ["a", "b", "c"]
>> a.zip(b)
=> [["x", "a"], ["y", "b"], ["z", "c"]]
>>

答案 3 :(得分:1)

答案 4 :(得分:1)

我喜欢在使用Ruby迭代多个数组时使用转置。希望这会有所帮助。

bigarray = []
bigarray << array_1
bigarray << array_2
bigarray << array_3
variableName = bigarray.transpose

variableName.each do |item1,item2,item3|

# do stuff per item
# eg 
puts "item1"
puts "item2"
puts "item3"

end