配列の要素を変更するメソッド
配列の要素を変更するメソッド3つ紹介する
[]=
fill
replace
[]=
メソッド
指定したインデックスの値を書き換える。インデックスが配列の範囲を越える時には、配列の長さが自動的に伸長され、伸長された領域は nil で初期化される。
インデックスに Range オブジェクトを指定すると、その範囲にある要素を置換する。
また [start, length] =
と指定すると、インデックス start から length 個の要素を書き換える。
ary = [1, 2, 3, 4, 5]
ary[0] = "a"
p ary # => ["a", 2, 3, 4, 5]
ary[9] = 10
p ary # => ["a", 2, 3, 4, 5, nil, nil, nil, nil, 10]
ary[1..3] = ["b", "c", "d"]
p ary # => ["a", "b", "c", "d", 5, nil, nil, nil, nil, 10]
ary[5, 4] = [6, 7, 8, 9]
p ary # => ["a", "b", "c", "d", 5, 6, 7, 8, 9, 10]
fill
メソッド
配列のすべての要素をしていしたオブジェクトに置き換える。
引数を2つ以上与えた場合、始点と終点やRangeオブジェクトを与えることで、該当する部分のみ変更される。
引数の代わりにブロックを指定すると、ブロックの評価結果で要素を変更する。
ary = [1, 2, 3, 4, 5]
ary.fill("a")
p ary # => ["a", "a", "a", "a", "a"]
ary[0].upcase!
p a # => ["A", "A", "A", "A", "A"]
ary.fill("b", 2..4)
p ary # => ["A", "A", "b", "b", "b"]
ary.fill { |index| index * 2 }
p ary # => [0, 2, 4, 6, 8]
replace
メソッド
引数で指定された配列で自身を置き換える。
=
の再代入とは異なり、object_id は変化しない。
ary = [1, 2, 3]
p ary.object_id # => 260
ary = [4, 5, 6]
p ary.object_id # => 280
ary.replace([7, 8, 9])
p ary # => [7, 8, 9]
p ary.object_id # => 280