配列の要素を置換する3つの方法
すべての要素を置き換える
配列のすべての要素を別の値に置き換えるには、flll
メソッドを使う。
[1, 2, 3].fill(4) #=> [4, 4, 4]
fill
メソッドはブロックを取ることもできる。その場合、ブロックにはindexが与えられ、ブロックの評価結果が値となる。
[nil, nil, nil].fill{|index| index} #=> [1, 2, 3]
別の配列の値で置き換える
replace
メソッドを使えば、配列の要素を別の配列の要素で置き換えることができる。
これは実質的には配列から配列へのコピーである。要素数も置換先の配列と同じになる。
[1, 2, 3].replace([4, 5]) #=> [4, 5]
もし配列の要素を部分的に上書きしたいのであれば、配列への=
による代入の形で書ける。
以下は2番目の要素から3要素分を、別の配列により上書きする例である。
[1, 2, 3, 4, 5][2, 3] = [9, 9, 9] #=> [1, 9, 9, 9, 5]
配列を別の配列に写像する
配列の値を元に、値を別の値に写像した配列を得るには、map
メソッドを使う。
以下の例では配列の値をインクリメントした新しい配列を返す。
[1, 2, 3].map{|i| i + 1} #=> [2, 3, 4]
map
は非常に強力なメソッドだ。
map
はEnumerable
のメソッドであり、あらゆるEnumerable
のオブジェクトから、配列を作り出すことができる。
例えば以下ではInteger#times
を使って10要素の乱数列を生成している。
10.times.map{ rand(10) } #=> [4, 2, 4, 5, 2, 6, 7, 6, 3, 7]
配列に限定すると、配列を破壊的に変更する、map!
も用意されている。元の配列が必要ない場合はこちらを使う。
a = [1, 2, 3] a.map!{|i| i + 1} p a #=> [2, 3, 4]