Ruby_Array_8
この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.0.0 リファレンスマニュアル)
インスタンスメソッド
self[start, length] = val
- インデックスstartからlength個の要素を配列valの内容で置き換える
- startが自身の末尾を超えるとき、配列の長さを自動的に拡張して拡張した領域をnilで初期化する
- startの値が負のときには末尾からのインデックスとみなす
- startに整数以外のオブジェクトを指定した場合はto_intメソッドによる暗黙の型変換を試みる
- lengthの値が0のときはstartの直前にvalを挿入する
- valに配列以外のオブジェクトを指定した場合はto_aryメソッドによる暗黙の型変換を試みる
- to_aryメソッドに応答できない場合は[val]を用いる
- valの長さがlengthと等しくない場合、valの長さに合わせて要素が削除されたりずれたりする
- valが空配列ならstartからendまでの要素が削除される
- start、lengthに整数以外の(暗黙の型変換が行えない)オブジェクトを指定した場合、またvalに配列以外の(暗黙の型変換が行えない)オブジェクトを指定した場合にTypeErrorが発生する
- startが自身の始点よりも前を指している場合、またlengthに負の数を指定した場合にIndexErrorが発生する
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[1, 3] = ['a', 'b'] => ["a", "b"] irb(main):003:0> arr => [1, "a", "b", 5] # memo # idx=1,2,3の要素が削除されて'a','b'が挿入されている
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[10, 5] = ['a', 'b'] => ["a", "b"] irb(main):003:0> arr => [1, 2, 3, 4, 5, nil, nil, nil, nil, nil, "a", "b"]
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[0, 10] = 'z' => "z" irb(main):003:0> arr => ["z"]
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[2, 0] = 'z' => "z" irb(main):003:0> arr => [1, 2, "z", 3, 4, 5] # memo # lengthが0なので、startの直前にvalが挿入されている
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[2, 2] = [] => [] irb(main):003:0> arr => [1, 2, 5]
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr['1', 1] = 'z' 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):6:in `<main>' 1: from (irb):6:in `[]=' TypeError (no implicit conversion of String into Integer) irb(main):003:0> arr[1, '1'] = 'z' Traceback (most recent call last): 6: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>' 5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load' 4: 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)>' 3: from (irb):6:in `<main>' 2: from (irb):7:in `rescue in <main>' 1: from (irb):7:in `[]=' TypeError (no implicit conversion of String into Integer)
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[-10, 20] = 'z' 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):2:in `<main>' 1: from (irb):2:in `[]=' IndexError (index -10 too small for array; minimum: -5)
irb(main):001:0> arr = [1, 2, 3, 4, 5] => [1, 2, 3, 4, 5] irb(main):002:0> arr[1, -1] = 'z' 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):4:in `<main>' 1: from (irb):4:in `[]=' IndexError (negative length (-1))