Ruby 2.4.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Rangeクラス

class Range

クラス・モジュールの継承リスト: Range < Enumerable < Object < Kernel < BasicObject

要約

範囲オブジェクトのクラス。範囲オブジェクトは文字どおり何らかの意味での範囲を表します。数の範囲はもちろん、日付の範囲や、「"a" から "z" まで」といった文字列の範囲を表すこともできます。

作り方

範囲オブジェクトは、Range.new を用いるほか、範囲演算子(`..' または `...')を用いた 演算子式/範囲式 で生成できます。いずれの方法でも始端と終端を与えます。

範囲オブジェクトの例

Range.new(1, 5) # 1 以上 5 以下
1..5            # 同上
1...5           # 1 以上 5 未満

この例で分かるように、範囲オブジェクトは終端を含む範囲も含まない範囲も表せます。

機能

範囲オブジェクトは範囲を表しているので、基本的な機能として「ある値がその範囲に含まれるか否かを判定する」ということがあります。

値が範囲に含まれるかどうかを判定

p (1..5).cover?(6)  # => false
p (1..5).cover?(5)  # => true
p (1...5).cover?(5) # => false

Range#cover? メソッドでの判定には演算子 <=> が使われます。

当然、始端と終端は <=> メソッドで比較可能である(nil 以外を返す)必要があります。

範囲オブジェクトのもう一つの基本的機能は繰り返しの範囲を表すことです。

繰り返しの範囲を範囲オブジェクトで表す

(3..5).each{ |i| p i }
# => 3
#    4
#    5

(3...5).each{ |i| p i }
# => 3
#    4

繰り返しの範囲を表す範囲オブジェクトは、始端が「次の値」を返す succ メソッドを持たなければなりません。

Range クラスには Enumerable が include してあるので,Range#each に基づき、Enumerable モジュールが提供する多様なメソッドを使うことができます。

破壊的な変更

Ruby の Range クラスは immutable です。つまり、オブジェクト自体を破壊的に変更することはできません。ですので、一度生成された Range のオブジェクトの指し示す範囲は決して変更することはできません。


range = 1..10
range.first     # => 1
range.first = 1 # => NoMethodError

特異メソッド

定義 説明
new(first, last, exclude_end = false) -> Range

first から last までの範囲オブジェクトを生成して返します。

インスタンスメソッド

定義 説明
self == other -> bool

指定された other が Range クラスのインスタンスであり、始端と終端が == メソッドで比較して等しく、Range#exclude_end? が同じ場合に true を返します。そうでない場合に false を返します。

self === obj -> bool
include?(obj) -> bool
member?(obj) -> bool

obj が範囲内に含まれている時に true を返します。そうでない場合は、false を返します。

begin -> object
first -> object

始端の要素を返します。始端を持たない範囲オブジェクトの場合、begin はnilを返しますが, first は例外 RangeError が発生します。

first(n) -> [object]

最初の n 要素を返します。範囲内に要素が含まれない場合は空の配列を返します。

bsearch {|obj| ... } -> object | nil
bsearch -> Enumerator

ブロックの評価結果で範囲内の各要素の大小判定を行い、条件を満たす値を二分探索(計算量は O(log n))で検索します。要素が見つからない場合は nil を返します。

cover?(obj) -> bool

obj が範囲内に含まれている時に true を返します。

each {|item| ... } -> self
each -> Enumerator

範囲内の要素に対して繰り返します。

end -> object
last -> object

終端の要素を返します。範囲オブジェクトが終端を含むかどうかは関係ありません。

last(n) -> [object]

最後の n 要素を返します。範囲内に要素が含まれない場合は空の配列を返します。

eql?(other) -> bool

指定された other が Range クラスのインスタンスであり、始端と終端が eql? メソッドで比較して等しく、Range#exclude_end? が同じ場合に true を返します。そうでない場合に false を返します。

exclude_end? -> bool

範囲オブジェクトが終端を含まないとき真を返します。

hash -> Integer

始端と終端のハッシュ値と Range#exclude_end? の値からハッシュ値を計算して整数として返します。

inspect -> String

self を文字列に変換します(始端と終端のオブジェクトは #inspect メソッドで文字列に変換されます)。

max -> object | nil
max(n) -> [object]

範囲内の最大の値、もしくは最大の n 要素が降順で入った配列を返します。

max {|a, b| ... } -> object | nil
max(n) {|a, b| ... } -> [object]

ブロックの評価結果で範囲内の各要素の大小判定を行い、最大の要素、もしくは最大の n 要素を返します。引数を指定しない形式では、範囲内に要素が存在しなければ nil を返します。引数を指定する形式では、空の配列を返します。

min -> object | nil
min(n) -> [object]

範囲内の最小の値、もしくは最小の n 要素が昇順で入った配列を返します。

min {|a, b| ... } -> object | nil
min(n) {|a, b| ... } -> [object]

ブロックの評価結果で範囲内の各要素の大小判定を行い、最小の要素、もしくは最小の n 要素を返します。引数を指定しない形式では、範囲内に要素が存在しなければ nil を返します。引数を指定する形式では、空の配列を返します。

size -> Integer | Float::INFINITY | nil

範囲内の要素数を返します。始端、終端のいずれかのオブジェクトが Numeric のサブクラスのオブジェクトではない場合には nil を返します。

step(s = 1) {|item| ... } -> self
step(s = 1) -> Enumerator

範囲内の要素を s おきに繰り返します。

to_s -> String

self を文字列に変換します(始端と終端のオブジェクトは #to_s メソッドで文字列に変換されます)。

継承したメソッド

! != __id__ __send__ instance_eval instance_exec method_missing singleton_method_added singleton_method_removed singleton_method_undefined all? any? chunk chunk_while collect collect_concat count cycle detect drop drop_while each_cons each_entry each_slice each_with_index each_with_object entries find_all find_index grep grep_v group_by inject lazy max_by min_by minmax minmax_by none? one? partition reject reverse_each slice_after slice_before slice_when sort sort_by sum take take_while to_h to_set uniq zip !~ <=> =~ _dump class clone define_singleton_method display enum_for equal? extend freeze frozen? initialize initialize_copy instance_of? instance_variable_defined? instance_variable_get instance_variable_set instance_variables is_a? itself marshal_dump marshal_load method methods nil? object_id pretty_inspect pretty_print pretty_print_cycle pretty_print_inspect pretty_print_instance_variables private_methods protected_methods psych_to_yaml public_method public_methods public_send remove_instance_variable respond_to? respond_to_missing? send singleton_class singleton_method singleton_methods taint tainted? tap to_ary to_hash to_int to_io to_proc to_regexp to_str trust untaint untrust untrusted? .yaml_tag ::ARGF ::ARGV ::DATA ::ENV ::FALSE ::NIL ::RUBY_COPYRIGHT ::RUBY_DESCRIPTION ::RUBY_ENGINE ::RUBY_ENGINE_VERSION ::RUBY_PATCHLEVEL ::RUBY_PLATFORM ::RUBY_RELEASE_DATE ::RUBY_REVISION ::RUBY_VERSION ::SCRIPT_LINES__ ::STDERR ::STDIN ::STDOUT ::TOPLEVEL_BINDING ::TRUE

追加されるメソッド

定義 説明 ライブラリ
json_create(hash) -> Range

JSON のオブジェクトから Ruby のオブジェクトを生成して返します。

json/add/range
to_json(*args) -> String

自身を JSON 形式の文字列に変換して返します。

json/add/range