Ruby_Array_5
この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.0.0 リファレンスマニュアル)
インスタンス
self[nth] -> object | nil
at(nth) -> object | nil
- nth番目の要素を返す
- nth番目の要素が存在しないときはnilを返す
- 先頭の要素が0番目
- nthの値が負のときは末尾からのインデックスとみなす
- 末尾の要素が-1番目
- nthに整数以外のオブジェクトを指定した場合はto_intメソッドによる暗黙の型変換を試みる
irb(main):001:0> ['a', 'b', 'c'][0] => "a" irb(main):002:0> ['a', 'b', 'c'][1] => "b" irb(main):003:0> ['a', 'b', 'c'][5] => nil irb(main):004:0> ['a', 'b', 'c'][-1] => "c" irb(main):005:0> ['a', 'b', 'c'][-2] => "b" irb(main):006:0> ['a', 'b', 'c'][-5] => nil
irb(main):001:0> ['a', 'b', 'c'][0.2] => "a" irb(main):002:0> ['a', 'b', 'c'][1.2] => "b" # memo # 0.2.to_i #=> 0 # 1.2.to_i #=> 1
irb(main):001:0> ['a', 'b', 'c']['1'] Traceback (most recent call last): 5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>' 4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load' 3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>' 2: from (irb):1:in `<main>' 1: from (irb):1:in `[]' TypeError (no implicit conversion of String into Integer) # memo # '1'は整数以外のオブジェクトで、to_iすると1になるけど、 # to_intメソッドによる暗黙の型変換ではTypeErrorになるのかな? # '1'.to_i #=> 1
self[range] -> Array | nil
- Rangeオブジェクトrangeの範囲にある要素からなる部分配列を返す
- rangeのfirstの値が配列の範囲に収まらない場合nilを返す
- rangeのfirstがendより後にある場合は空の配列を返す
- rangeのfirstやendの値が負のときは末尾からのインデックスとみなす
- endの値が配列の範囲を超えるとき、超えた分は無視される
rb(main):001:0> ['a', 'b', 'c', 'd', 'e'][0..1] => ["a", "b"] irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][0...1] => ["a"] irb(main):003:0> ['a', 'b', 'c', 'd', 'e'][0..-1] => ["a", "b", "c", "d", "e"] irb(main):004:0> ['a', 'b', 'c', 'd', 'e'][0..-2] => ["a", "b", "c", "d"] irb(main):005:0> ['a', 'b', 'c', 'd', 'e'][-2..-1] => ["d", "e"]
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][-2..4] => ["d", "e"] irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][1..10] => ["b", "c", "d", "e"]
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][10..20] => nil # 特殊なケース # 5番目に要素がないので上記と同様にnilかと思いきや # firstが自身の長さと同じ場合には以下のようになる irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][5..20] => []
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][2..1] => [] irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][-1..2] => []
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][0..0] => ["a"] irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][0...0] => []
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][3..4.2] => ["d", "e"] # memo # 4.2.to_i #=> 4
self[start, length] -> Array | nil
- start番目からlength個の要素を含む
- lengthが負、もしくは、startが自身の範囲を超えたときはnilを返す
- start、lengthは整数以外のオブジェクトを指定した場合、 to_int メソッドによる暗黙の型変換を試みる
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][0, 2] => ["a", "b"] irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][-3, 2] => ["c", "d"]
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][0, 0] => [] irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][0, 10] => ["a", "b", "c", "d", "e"]
irb(main):002:0> ['a', 'b', 'c', 'd', 'e'][0, -1] => nil irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][10, 1] => nil # 特殊なケース # 5番目に要素がないので上記と同様にnilかと思いきや # startが自身の長さと同じ場合には以下のようになる irb(main):023:0> ['a', 'b', 'c', 'd', 'e'][5, 1] => []
irb(main):001:0> ['a', 'b', 'c', 'd', 'e'][3, 2.2] => ["d", "e"] # memo # 2.2.to_i #=> 2
メモ
- nilと空配列を返すパターンは覚えておきたい。返り値の型が変わるので。
- Range、.. は 以下(いか)、... は 未満(みまん)、と、点の数とひらがなの数で覚えている