Ruby'de bir for döngüsü için sözdizimi


Yanıtlar:


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

veya

for element in array do
  element.do_stuff
end

Dizine ihtiyacınız varsa, bunu kullanabilirsiniz:

array.each_with_index do |element,index|
  element.do_stuff(index)
end

15
Özellikle bir döngüde indeksleme arıyordum, bu çözümlerin hiçbiri bunun nasıl yapılacağını hemen belli etmiyor. operasyon, kodda array.length ile niyetine ihanet etti ...
jheriko

6
Cevabımı dikkatlice okuyun. Endeksleme dahil bir döngü çözümü var.
Eimantas

8
Çoğu zaman eachharika. Ama bazen sadece lanet olası geleneksel bir döngü istiyorum. Bazen "Ruby yöntemi" sadece can sıkıcı olabilir.
Ruben Martinez Jr.

1
Ruby'de indeksi manuel olarak nasıl ayarlayabilirim, böylece kendim bir sıralama yazabilirim
Muhammad Umer

6
Ya sonraki iki yinelemeyi atlamak istersem
Muhammed Umer

77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

bunu yapmanın diğer yolu şudur

3.times do |n|
  puts n;
end

thats 0, 1, 2 yazacak, dolayısıyla dizi yineleyici gibi

Bu varyantın yazarın ihtiyaçlarına daha uygun olduğunu düşünün


29

Bunu, google "ruby for loop" için bir üst bağlantı olarak tutmaya devam ediyorum, bu nedenle adımın basitçe "1" olmadığı döngüler için bir çözüm eklemek istedim. Bu durumlar için Numerics ve Date nesnelerinde bulunan 'step' yöntemini kullanabilirsiniz. Bunun bir 'for' döngüsü için yakın bir yaklaşım olduğunu düşünüyorum.

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

Eşdeğerlik olacaktır

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

veya

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

veya

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

Çok Yakutça değil, ancak Ruby'de sorudan for döngüsünü yapmanın en iyi yolu


Bu harika. Cevabın değil, eachdaha ziyade olduğu doğru each_index. +1
Dan Rosenstark

12

Bir döngüyü belirli sayıda yinelemek için şunu deneyin:

n.times do
  #Something to be done n times
end

10

Eğer varsa dizinizi erişmek gerekmez , (döngü sadece basit) kullanabilirsiniz kadar ya da her:

Şuna kadar:

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

Her biri:

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

8

Ne? 2010'dan beri ve hiç kimse Ruby'nin para cezası olduğundan bahsetmedi (sadece kimse kullanmıyor):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end

5
.Each ... do'nun bir avantajı, döngünün sonunda bloğun geçici olarak kapsam dışında kalması, oysa for ... in'in kapsamda geçici olarak kalmasıdır .
Wayne Conrad

4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}

0

Ruby'nin numaralandırma döngüsü sözdizimi farklıdır:

collection.each do |item|
...
end

Bu, "bağımsız değişken olarak 'blok argüman' ile bloğu alan 'koleksiyon' dizi nesnesi örneğinin 'her' yöntemine bir çağrı" olarak okunur. Ruby'deki blok sözdizimi, tek satırlı ifadeler için 'do ... end' veya '{...}' şeklindedir.

Blok argümanı '| öğe |' isteğe bağlıdır, ancak sağlanırsa, ilk bağımsız değişken otomatik olarak döngülü numaralandırılmış öğeyi temsil eder.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.