Sintaks untuk loop for di ruby


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

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


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

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

17
array.each_index do |i|
  ...
end

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


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

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 

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

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}"}

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.