Ruby: Wie iteriere ich über einen Bereich, aber in festgelegten Schritten?


155

Ich iteriere also über einen Bereich wie folgt:

(1..100).each do |n|
    # n = 1
    # n = 2
    # n = 3
    # n = 4
    # n = 5
end

Aber was ich tun möchte, ist um 10 zu iterieren.

Anstatt also num 1 zu erhöhen , wäre der nächste ntatsächlich 10, dann 20, 30 usw. usw.



@DiegoDias aber das hat das Beste und dann den Thread
Jackson Jegatheesan

Antworten:



11

Sie können verwenden Numeric#step.

0.step(30,5) do |num|
  puts "number is #{num}"
end
# >> number is 0
# >> number is 5
# >> number is 10
# >> number is 15
# >> number is 20
# >> number is 25
# >> number is 30

5
rng.step(n=1) {| obj | block } => rng

Iteriert über rng und übergibt jedes n-te Element an den Block. Wenn der Bereich Zahlen oder Zeichenfolgen enthält, wird die natürliche Reihenfolge verwendet. Andernfalls ruft step succ auf, um Bereichselemente zu durchlaufen. Der folgende Code verwendet Klasse Xs, die in der Dokumentation auf Klassenebene definiert ist.

range = Xs.new(1)..Xs.new(10)
range.step(2) {|x| puts x}
range.step(3) {|x| puts x}

produziert:

1 x
3 xxx
5 xxxxx
7 xxxxxxx
9 xxxxxxxxx
1 x
4 xxxx
7 xxxxxxx
10 xxxxxxxxxx

Referenz: http://ruby-doc.org/core/classes/Range.html

......


5

Hier ist eine andere, vielleicht vertrautere Art, dies zu tun:

for i in (0..10).step(2) do
    puts i
end

10
Entschuldigung, aber der Ruby Style Guide rät dringend von den Verwendungsschleifen ab for.
Darth Egregious

@DarthEgregious warum ist das so?
Doug

Es ist eine Erweiterung der Philosophie, dass jedes Ding ein Objekt und jede Aktion ein Methodenaufruf ist. Anstatt eine integrierte Schleife zum Schleifen zu verwenden for, sollten Sie die eachMethode verwenden.
Darth Egregious
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.