Sintaks untuk loop for di ruby

87

Bagaimana cara melakukan loop for jenis ini di Ruby?

for(int i=0; i<array.length; i++) {

}
DNB5brims
sumber
@johannes Membaca buku adalah ide yang bagus, tetapi sebaiknya bukan tentang Ruby 1.6!
Andrew Grimm
Jangan lupa untuk melihat beberapa metode berguna di ruby-doc: Enumerable module .
Ivan Chau

Jawaban:

118
array.each do |element|
  element.do_stuff
end

atau

for element in array do
  element.do_stuff
end

Jika Anda membutuhkan indeks, Anda dapat menggunakan ini:

array.each_with_index do |element,index|
  element.do_stuff(index)
end
Eimantas
sumber
15
saya sedang mencari pengindeksan khusus untuk pengindeksan dalam satu lingkaran, tidak satu pun dari solusi ini membuatnya segera jelas bagaimana melakukannya. op mengkhianati niatnya dengan array.length dalam kode ...
jheriko
6
Baca jawaban saya dengan cermat. Ada solusi perulangan dengan pengindeksan disertakan.
Eimantas
8
Sering kali, eachitu bagus. Tapi terkadang saya hanya ingin pengulangan tradisional terkutuk. Terkadang "cara Ruby" bisa sangat mengganggu.
Ruben Martinez Jr.
1
bagaimana cara mengatur indeks secara manual dalam ruby ​​sehingga saya dapat menulis semacam itu sendiri
Muhammad Umer
6
bagaimana jika saya ingin melewatkan dua iterasi berikutnya
Muhammad Umer
77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

cara lain untuk melakukannya adalah sebagai berikut

3.times do |n|
  puts n;
end

thats akan mencetak 0, 1, 2, jadi bisa digunakan seperti iterator array juga

Pikirkan varian itu lebih sesuai dengan kebutuhan penulis

Ph0en1x
sumber
29

Saya terus menekan ini sebagai tautan teratas untuk google "ruby for loop", jadi saya ingin menambahkan solusi untuk loop di mana langkahnya tidak hanya '1'. Untuk kasus ini, Anda dapat menggunakan metode 'langkah' yang ada pada objek Numerik dan Tanggal. Saya pikir ini adalah pendekatan yang dekat untuk loop 'untuk'.

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
dsz
sumber
20

Persamaannya akan

for i in (0...array.size)
end

atau

(0...array.size).each do |i|
end

atau

i = 0
while i < array.size do
   array[i]
   i = i + 1 # where you may freely set i to any value
end
jsh-c
sumber
17
array.each_index do |i|
  ...
end

Ini tidak terlalu Ruby, tapi itu cara terbaik untuk melakukan loop dari pertanyaan di Ruby

EmFi
sumber
Ini brilian. Memang benar jawabannya bukan eachmelainkan each_index. +1
Dan Rosenstark
12

Untuk mengulangi perulangan beberapa kali, coba:

n.times do
  #Something to be done n times
end
yts
sumber
10

Jika Anda tidak perlu mengakses array Anda , (hanya loop for yang sederhana) Anda dapat menggunakan upto atau each:

Hingga:

1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
 => 2 

Setiap:

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 
Benjamin Crouzier
sumber
8

Apa? Dari tahun 2010 dan tidak ada yang menyebutkan Ruby memiliki loop for / in yang bagus (hanya tidak ada yang menggunakannya):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end
steenslag.dll
sumber
5
Satu keuntungan dari .each ... do adalah bahwa blok sementara berada di luar ruang lingkup pada akhir perulangan, sedangkan untuk ... di meninggalkan lingkup sementara.
Wayne Conrad
4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
KAMU
sumber
0

Sintaks putaran enumerasi Ruby berbeda:

collection.each do |item|
...
end

Ini dibaca sebagai "panggilan ke metode 'setiap' dari instance objek array 'collection' yang mengambil blok dengan 'blockargument' sebagai argumen". Sintaks blok di Ruby adalah 'do ... end' atau '{...}' untuk pernyataan baris tunggal.

Argumen blok '| item |' bersifat opsional tetapi jika disediakan, argumen pertama secara otomatis mewakili item enumerasi yang diulang.

JackyJohnson
sumber