Cách tốt nhất (làm đẹp và hiệu quả về hiệu suất) là gì để lặp qua nhiều mảng trong Ruby? Hãy nói rằng chúng ta có một mảng:Cách tốt nhất để lặp qua nhiều mảng?
a=[x,y,z]
b=['a','b','c']
và tôi muốn điều này:
x a
y b
z c
Cảm ơn.
Cách tốt nhất (làm đẹp và hiệu quả về hiệu suất) là gì để lặp qua nhiều mảng trong Ruby? Hãy nói rằng chúng ta có một mảng:Cách tốt nhất để lặp qua nhiều mảng?
a=[x,y,z]
b=['a','b','c']
và tôi muốn điều này:
x a
y b
z c
Cảm ơn.
Phương pháp zip
trên các đối tượng mảng:
a.zip b do |items|
puts items[0], items[1]
end
Bạn cũng có thể một cái gì đó như 'a.zip (b) {| đầu tiên, thứ hai | p [đầu tiên, thứ hai]} 'thay vì lập chỉ mục' mục'. –
>> a=["x","y","z"]
=> ["x", "y", "z"]
>> b=["a","b","c"]
=> ["a", "b", "c"]
>> a.zip(b)
=> [["x", "a"], ["y", "b"], ["z", "c"]]
>>
Một thay thế là sử dụng each_with_index
. Một điểm chuẩn nhanh chóng cho thấy rằng điều này là hơi nhanh hơn so với sử dụng zip.
a.each_with_index do |item, index|
puts item, b[index]
end
Benchmark:
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
Kết quả:
user system total real
ewi 7.890000 0.000000 7.890000 ( 7.887574)
zip 10.920000 0.010000 10.930000 (10.918568)
Đây có phải là MRI (1.8) hoặc YARV (1.9) không? –
ruby 1.9.2p136 (2010-12-25 bản sửa đổi 30365) [x86_64-darwin10.6.0] –
Tôi thích sử dụng transpose khi lặp lại qua nhiều mảng sử dụng Ruby. Hi vọng điêu nay co ich.
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
có thể trùng lặp của [Cách 'Ruby là gì' để lặp qua hai mảng cùng một lúc] (http://stackoverflow.com/questions/3580049/whats-the-ruby-way-to-iterate-over -two-arrays-at-once) – Vache