web-dev-qa-db-ja.com

Ruby:範囲を反復する方法ですが、増分を設定しますか?

だから私はそのような範囲で繰り返しています:

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

しかし、私がやりたいのは、10単位で繰り返すことです。

したがって、nを1ずつ増やす代わりに、次のnは実際には10、20、30などになります。

143
Shpigford

完全なAPIについては、 http://Ruby-doc.org/core/classes/Range.html#M000695 を参照してください。

基本的に、step()メソッドを使用します。例えば:

(10..100).step(10) do |n|
    # n = 10
    # n = 20
    # n = 30
    # ...
end
236
Berin Loritsch

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
10
Arup Rakshit
rng.step(n=1) {| obj | block } => rng

Rngを反復処理し、n番目の各要素をブロックに渡します。範囲に数字または文字列が含まれる場合、自然な順序が使用されます。それ以外の場合、stepはsuccを呼び出して範囲要素を反復処理します。次のコードでは、クラスレベルのドキュメントで定義されているクラスXを使用しています。

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

生成するもの:

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

リファレンス: http://Ruby-doc.org/core/classes/Range.html

......

5
Jahan Zinedine

これを行うための、おそらくより見慣れた別の方法を次に示します。

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