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


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

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


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

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

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


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

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 

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

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.