Ruby Tips!

RubyのTipsを紹介します

配列の要素を置換する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は非常に強力なメソッドだ。
mapEnumerableのメソッドであり、あらゆる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]