Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
範囲.min / max / sum / count / step
範囲オブジェクト(Range)の集計・ステップ処理メソッドです。最小値・最大値・合計の取得や、一定間隔での繰り返しができます。
構文
# 最小値・最大値を返します。
範囲.min
範囲.max
# ブロックで比較基準を指定します。
範囲.min { |a, b| a <=> b }
範囲.max_by { |要素| キー }
# 全要素の合計を返します。
範囲.sum
範囲.sum { |要素| 変換処理 }
# 要素の個数を返します。
範囲.count
範囲.size # 整数範囲のみ高速に計算します。
# 指定した間隔で繰り返します。
範囲.step(間隔) { |値| 処理 }
メソッド一覧
| メソッド | 概要 |
|---|---|
| min | 範囲内の最小値を返します。 |
| max | 範囲内の最大値を返します(終端を含む範囲のみ正確に動作)。 |
| min_by { |e| } | ブロックの戻り値が最小になる要素を返します。 |
| max_by { |e| } | ブロックの戻り値が最大になる要素を返します。 |
| sum | 全要素の合計を返します。ブロックを渡すと各要素を変換してから合計します。 |
| count | 全要素の個数を返します。ブロックで条件を指定することもできます。 |
| size | 範囲の要素数を返します。整数範囲では要素を列挙せず高速に計算します。 |
| step(n) { |v| } | 開始値からn刻みで終端まで繰り返します。浮動小数点も使用できます。 |
サンプルコード
範囲 = (1..10)
# min / max: 最小・最大値を取得します。
puts 範囲.min # 1
puts 範囲.max # 10
# sum: 合計を計算します(1から10の合計 = 55)。
puts 範囲.sum # 55
# ブロックで変換してから合計します(奇数だけの合計)。
奇数合計 = 範囲.sum { |n| n.odd? ? n : 0 }
puts 奇数合計 # 25(1+3+5+7+9)
# count / size: 要素数を取得します。
puts 範囲.count # 10
puts 範囲.size # 10
# count にブロックで条件を指定します。
puts 範囲.count { |n| n.even? } # 5(偶数の個数)
# step: 指定した間隔で繰り返します。
(1..10).step(3) { |n| print "#{n} " }
puts # 1 4 7 10
# 浮動小数点のステップ。
(0.0..1.0).step(0.25) { |f| print "#{f} " }
puts # 0.0 0.25 0.5 0.75 1.0
# 実用例: 1から100の2乗の合計。
puts (1..100).sum { |n| n ** 2 } # 338350
概要
範囲オブジェクトは『Enumerable』モジュールをインクルードしているため、配列と同様に多くのメソッドが使えます。『min』『max』『sum』『count』はすべて『Enumerable』由来のメソッドです。
『step』は数値の範囲だけでなく、日付の範囲にも応用できます(例: 『(Date.today..Date.today+7).step(1)』)。第2引数に数値を渡す書き方と、ブロックを渡す書き方の両方があります。
終端を含まない範囲(『...』)で『max』を呼び出すと、終端の1つ前の値が返ります。意図した最大値かどうか確認してください。また浮動小数点の『step』は内部の誤差蓄積により終端値に到達しない場合があります。
範囲の基本操作(配列変換・存在確認)については『範囲.to_a / include? / cover?』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。