Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > 組み込みライブラリ > Rangeクラス
クラス・モジュールの継承リスト: Range < Enumerable < Object < Kernel < BasicObject
範囲オブジェクトのクラス。範囲オブジェクトは文字どおり何らかの意味での範囲を表します。数の範囲はもちろん、日付の範囲や、「"a" から "z" まで」といった文字列の範囲を表すこともできます。
範囲オブジェクトは、Range.new を用いるほか、範囲演算子(`..' または `...')を用いた 演算子式/範囲式 で生成できます。いずれの方法でも始端と終端を与えます。
Range.new(1, 5) # 1 以上 5 以下
1..5 # 同上
1...5 # 1 以上 5 未満
この例で分かるように、範囲オブジェクトは終端を含む範囲も含まない範囲も表せます。
Ruby 2.6.0 からは、終端に nil を与えることで「終端を持たない範囲オブジェクト」を作ることができるようになりました。
p Range.new(1, nil) # 1 以上(上限無し)を表す
p(1..nil) # 同上
p(1..) # 同上(略した書き方)
範囲オブジェクトは範囲を表しているので、基本的な機能として「ある値がその範囲に含まれるか否かを判定する」ということがあります。
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 までの範囲オブジェクトを生成して返します。 |
定義 | 説明 | |
---|---|---|
step(s = 1) {|item| ... } -> self
|
範囲内の要素を s おきに繰り返します。 |
|
self == other -> bool
|
指定された other が Range クラスのインスタンスであり、始端と終端が == メソッドで比較して等しく、Range#exclude_end? が同じ場合に true を返します。そうでない場合に false を返します。 |
|
self === obj -> bool
|
始端と終端の中に obj があるとき、true を返します。そうでないとき、false を返します。 |
|
begin -> object
|
始端の要素を返します。始端を持たない範囲オブジェクトの場合、begin はnilを返しますが, first は例外 RangeError が発生します。 |
|
first(n) -> [object]
|
最初の n 要素を返します。範囲内に要素が含まれない場合は空の配列を返します。 |
|
bsearch {|obj| ... } -> object | nil
|
ブロックの評価結果で範囲内の各要素の大小判定を行い、条件を満たす値を二分探索(計算量は O(log n))で検索します。要素が見つからない場合は nil を返します。 |
|
cover?(obj) -> bool
|
obj が範囲内に含まれている時に true を返します。 |
|
cover?(range) -> bool
|
2.6 以降の cover? は、Range#include? や Range#=== と異なり、引数に Range オブジェクトを指定して比較できます。 |
|
each {|item| ... } -> self
|
範囲内の要素に対して繰り返します。 |
|
end -> object
|
終端の要素を返します。範囲オブジェクトが終端を含むかどうかは関係ありません。 |
|
last(n) -> [object]
|
最後の n 要素を返します。範囲内に要素が含まれない場合は空の配列を返します。 |
|
to_a -> Array
|
self を配列に変換します。 |
|
eql?(other) -> bool
|
指定された other が Range クラスのインスタンスであり、始端と終端が eql? メソッドで比較して等しく、Range#exclude_end? が同じ場合に true を返します。そうでない場合に false を返します。 |
|
exclude_end? -> bool
|
範囲オブジェクトが終端を含まないとき真を返します。 |
|
hash -> Integer
|
始端と終端のハッシュ値と Range#exclude_end? の値からハッシュ値を計算して整数として返します。 |
|
include?(obj) -> bool
|
obj が範囲内に含まれている時に true を返します。そうでない場合は、false を返します。 |
|
inspect -> String
|
self を文字列に変換します(始端と終端のオブジェクトは #inspect メソッドで文字列に変換されます)。 |
|
max -> object | nil
|
範囲内の最大の値、もしくは最大の n 要素が降順で入った配列を返します。 |
|
max {|a, b| ... } -> object | nil
|
ブロックの評価結果で範囲内の各要素の大小判定を行い、最大の要素、もしくは最大の n 要素を返します。引数を指定しない形式では、範囲内に要素が存在しなければ nil を返します。引数を指定する形式では、空の配列を返します。 |
|
min -> object | nil
|
範囲内の最小の値、もしくは最小の n 要素が昇順で入った配列を返します。 |
|
min {|a, b| ... } -> object | nil
|
ブロックの評価結果で範囲内の各要素の大小判定を行い、最小の要素、もしくは最小の n 要素を返します。引数を指定しない形式では、範囲内に要素が存在しなければ nil を返します。引数を指定する形式では、空の配列を返します。 |
|
size -> Integer | Float::INFINITY | nil
|
範囲内の要素数を返します。始端、終端のいずれかのオブジェクトが Numeric のサブクラスのオブジェクトではない場合には nil を返します。 |
|
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?
chain
chunk
chunk_while
collect
collect_concat
count
cycle
detect
drop
drop_while
each_cons
each_entry
each_slice
each_with_index
each_with_object
filter
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
then
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 |