Ruby:範囲を反復する方法はありますが、一定の増分で?


156

だから私はそのような範囲を反復しています:

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

しかし、私がやりたいのは、10代反復することです。

したがって、n1 ずつ増加する代わりに、次nは実際には10、20、30 などとなります。



@DiegoDiasしかし、これは最高のスレッドです
ジャクソンジェガティーサン

回答:


256

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

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

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

12
この答えは私が探していたものに私を導きました... 2回ある場合、あなたは行うことができます(time1..time2).step(15.minutes) do |time|
デイ


6

これは別の、おそらくもっと身近に見える方法です。

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

10
申し訳ありませんが、rubyスタイルガイドでは、forループを使用しないことを強くお勧めしています。
Darth Egregious 2015

@DarthEgregiousなぜですか?
Doug

これは、すべてのものがオブジェクトであり、すべてのアクションがメソッド呼び出しであるという哲学の延長です。したがって、組み込みのforループをfor使用するのではなく、eachメソッドを使用する必要があります。
Darth Egregious

5
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

……

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.