Składnia pętli for w języku Ruby

87

Jak zrobić tego typu pętlę for w Rubim?

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

}
DNB5brims
źródło
@johannes Czytanie książki to dobry pomysł, ale najlepiej nie o Rubim 1.6!
Andrew Grimm,
Nie zapomnij przyjrzeć się kilku przydatnym metodom w ruby-doc: Enumerable module .
Ivan Chau

Odpowiedzi:

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

lub

for element in array do
  element.do_stuff
end

Jeśli potrzebujesz indeksu, możesz użyć tego:

array.each_with_index do |element,index|
  element.do_stuff(index)
end
Eimantas
źródło
15
szukałem konkretnie indeksowania w pętli, żadne z tych rozwiązań nie od razu wskazuje, jak to zrobić. operacja zdradziła swoje zamiary z array.length w kodzie ...
jheriko
6
Przeczytaj uważnie moją odpowiedź. Jest rozwiązanie pętli z dołączonym indeksowaniem.
Eimantas
8
Często eachjest świetny. Ale czasami chcę po prostu cholernie tradycyjną pętlę for. Czasami „droga Ruby” może być po prostu denerwująca.
Ruben Martinez Jr.
1
Jak ręcznie ustawić indeksu w Ruby więc mogę napisać coś w sobie
Muhammad Umer
6
co jeśli chcę pominąć kolejne dwie iteracje
Muhammad Umer
77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

inny sposób, aby to zrobić, jest następujący

3.times do |n|
  puts n;
end

to wypisze 0, 1, 2, więc może być również użyte jako iterator tablicy

Pomyśl, że wariant lepiej pasuje do potrzeb autora

Ph0en1x
źródło
29

Wciąż klikam to jako górny link do google „ruby for loop”, więc chciałem dodać rozwiązanie dla pętli, w których krok nie był po prostu „1”. W takich przypadkach można użyć metody „step”, która istnieje w obiektach Numerics i Date. Myślę, że jest to bliskie przybliżenie pętli „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
dsz
źródło
20

Równoważność byłaby

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

lub

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

lub

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

Nie jest bardzo rubinowy, ale jest to najlepszy sposób na wykonanie pętli for z pytania w języku Ruby

EmFi
źródło
To jest genialne. Prawdą jest, że odpowiedź brzmi: nie, eachale raczej each_index. +1
Dan Rosenstark
12

Aby iterować pętlę określoną liczbę razy, spróbuj:

n.times do
  #Something to be done n times
end
jts
źródło
10

Jeśli nie potrzebujesz dostępu do swojej tablicy (tylko prosta pętla for), możesz użyć upto lub each:

Upto:

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

Każdy:

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 
Benjamin Crouzier
źródło
8

Co? Od 2010 roku nikt nie wspomniał, że Ruby ma karę za pętlę for / in (po prostu nikt jej nie używa):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end
steenslag
źródło
5
Jedną z zalet .each ... do jest to, że blok tymczasowo wychodzi poza zakres na końcu pętli, podczas gdy dla ... in pozostawia tymczasowo w zakresie.
Wayne Conrad,
4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
TY
źródło
0

Składnia pętli wyliczenia Rubiego jest inna:

collection.each do |item|
...
end

Czyta się to jako „wywołanie metody„ each ”instancji obiektu tablicy„ collection ”, która przyjmuje blok z argumentem„ blockargument ”. Składnia bloków w Rubim to „do ... end” lub „{...}” dla instrukcji jednowierszowych.

Argument blokowy „| item |” jest opcjonalny, ale jeśli jest podany, pierwszy argument automatycznie reprezentuje zapętlony wyliczany element.

JackyJohnson
źródło