迭代多个数组的最佳方法是什么?
在Ruby中迭代多个数组的最佳方法(性能方面的美观和高效)是什么? 假设我们有一个数组:
a=[x,y,z] b=['a','b','c']
我想要这个:
xa yb zc
谢谢。
数组对象上的zip
方法:
a.zip b do |items| puts items[0], items[1] end
另一种方法是使用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)
>> a=["x","y","z"] => ["x", "y", "z"] >> b=["a","b","c"] => ["a", "b", "c"] >> a.zip(b) => [["x", "a"], ["y", "b"], ["z", "c"]] >>
请参阅Python的“zip”内置的什么是Ruby等价物?
我喜欢在使用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