Syntax für eine for-Schleife in Ruby


Antworten:


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

oder

for element in array do
  element.do_stuff
end

Wenn Sie einen Index benötigen, können Sie diesen verwenden:

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

15
Ich habe speziell nach der Indizierung in einer Schleife gesucht. Keine dieser Lösungen macht sofort klar, wie das geht. Der Op verriet seine Absichten mit Array.Länge im Code ...
Jheriko

6
Lesen Sie meine Antwort sorgfältig durch. Es gibt eine Schleifenlösung mit Indizierung.
Eimantas

8
Oft eachist das toll. Aber manchmal möchte ich nur eine gottverdammte traditionelle Schleife. Manchmal kann der "Ruby Way" einfach nur nervig sein.
Ruben Martinez Jr.

1
Wie setze ich den Index manuell in Ruby, damit ich selbst eine Sortierung schreiben kann
Muhammad Umer

6
Was ist, wenn ich die nächsten zwei Iterationen überspringen möchte
Muhammad Umer

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

Der andere Weg, dies zu tun, ist der folgende

3.times do |n|
  puts n;
end

das wird 0, 1, 2 drucken, könnte also auch wie ein Array-Iterator verwendet werden

Denken Sie, dass diese Variante besser zu den Bedürfnissen des Autors passt


29

Ich treffe dies immer wieder als Top-Link für Google "Ruby for Loop", daher wollte ich eine Lösung für Loops hinzufügen, bei denen der Schritt nicht einfach "1" war. In diesen Fällen können Sie die Schrittmethode verwenden, die für Numerik- und Datumsobjekte vorhanden ist. Ich denke, dies ist eine enge Annäherung für eine 'for'-Schleife.

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

Die Äquivalenz wäre

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

oder

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

oder

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

Es ist nicht sehr Rubyish, aber es ist der beste Weg, um die for-Schleife aus der Frage in Ruby zu machen


Das ist brilliant. Es ist wahr, dass die Antwort nicht eachsondern ist each_index. +1
Dan Rosenstark

12

Versuchen Sie Folgendes, um eine Schleife eine feste Anzahl von Malen zu wiederholen:

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

10

Wenn Sie nicht auf Ihr Array zugreifen müssen (nur eine einfache for-Schleife), können Sie bis zu oder jedes verwenden:

Bis zu:

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

Jeder:

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

8

Was? Ab 2010 hat niemand erwähnt, dass Ruby eine Geldstrafe für / in-Schleife hat (es wird nur von niemandem verwendet):

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

5
Ein Vorteil von .each ... do besteht darin, dass der temporäre Block am Ende der Schleife aus dem Gültigkeitsbereich fällt, während für ... in der temporäre Bereich im Gültigkeitsbereich verbleibt .
Wayne Conrad

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

0

Rubys Aufzählungsschleifensyntax ist anders:

collection.each do |item|
...
end

Dies lautet "Aufruf der Methode 'each' der Array-Objektinstanz 'collection', die einen Block mit dem Argument 'blockargument' verwendet". Die Blocksyntax in Ruby lautet 'do ... end' oder '{...}' für einzeilige Anweisungen.

Das Blockargument '| item |' ist optional, aber falls angegeben, repräsentiert das erste Argument automatisch das in einer Schleife aufgezählte Element.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.