Làm cách nào để thực hiện loại vòng lặp for này trong Ruby?
for(int i=0; i<array.length; i++) {
}
Làm cách nào để thực hiện loại vòng lặp for này trong Ruby?
for(int i=0; i<array.length; i++) {
}
Câu trả lời:
array.each do |element|
element.do_stuff
end
hoặc là
for element in array do
element.do_stuff
end
Nếu bạn cần chỉ mục, bạn có thể sử dụng cái này:
array.each_with_index do |element,index|
element.do_stuff(index)
end
each
rất tốt. Nhưng đôi khi tôi chỉ muốn một vòng lặp for truyền thống chết tiệt. Đôi khi "Ruby way" có thể chỉ đơn giản là khó chịu.
Tôi tiếp tục đánh giá đây là một liên kết hàng đầu cho google "ruby for loop", vì vậy tôi muốn thêm giải pháp cho các vòng lặp mà bước này không chỉ đơn giản là '1'. Đối với những trường hợp này, bạn có thể sử dụng phương pháp 'bước' tồn tại trên các đối tượng Số và Ngày. Tôi nghĩ rằng đây là một xấp xỉ gần đúng cho một vòng lặp 'for'.
start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d|
puts d
end
array.each_index do |i|
...
end
Nó không phải là Rubyish, nhưng đó là cách tốt nhất để thực hiện vòng lặp for từ câu hỏi trong Ruby
each
nhưng đúng hơn each_index
. +1
Nếu bạn không cần truy cập vào mảng của mình , (chỉ một vòng lặp for đơn giản), bạn có thể sử dụng tối đa hoặc từng:
Lên đến:
1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
=> 2
Mỗi:
1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
=> 2..4
Gì? Từ năm 2010 và không ai đề cập đến Ruby có một vòng lặp for / in tốt (chỉ là không ai sử dụng nó):
ar = [1,2,3,4,5,6]
for item in ar
puts item
end
Cú pháp vòng lặp liệt kê của Ruby khác nhau:
collection.each do |item|
...
end
Điều này đọc là "một lệnh gọi đến phương thức 'each' của đối tượng mảng 'bộ sưu tập' nhận khối với 'blockargument' làm đối số". Cú pháp khối trong Ruby là 'do ... end' hoặc '{...}' đối với các câu lệnh một dòng.
Đối số khối '| item |' là tùy chọn nhưng nếu được cung cấp, đối số đầu tiên sẽ tự động đại diện cho mục được liệt kê trong vòng lặp.