Rubyリファレンス: Home

fill (Array)

Edit   History

標準クラス・モジュール > Array > fill

array.fill(obj)

fillメソッドは、配列のすべての要素を引数objで置き換えます。レシーバ自身を変更するメソッドです。戻り値はレシーバ自身です。

arr = Array.new(5)
arr.fill("O")
p arr
["O", "O", "O", "O", "O"]
array.fill(obj, start [, length])
array.fill(obj, range)

第2引数startに整数を指定すると、その位置以降の要素を置き換えます。第3引数lengthに整数を指定すると、startの位置からlength個の要素を置き換えます。第2引数rangeに範囲を指定すると、その範囲の要素を置き換えます。

位置や範囲の指定のしかたは、[][]=メソッドと同じです。0が1番目、1が2番目、...で、-1が末尾から1番目、-2が末尾から2番目、...です。範囲外の位置や範囲を指定したときは、エラーは出さず、要素を変更しません。

arr = Array.new(10, "O")
arr.fill("X", 2)      # 3番目以降
arr.fill("A", -2, 2)  # 末尾から2番目以降2つ
arr.fill("B", 4..6)   # 5番目から7番目まで
p arr
["O", "O", "X", "X", "B", "B", "B", "X", "A", "A"]
array.fill {|idx| block }
array.fill(start [, length]) {|idx| block }
array.fill(obj, range) {|idx| block }

fillメソッドにブロックを渡すと、ブロックの戻り値で要素を置き換えます。ブロック引数idxには要素の位置が入ります。メソッドの引数には、位置start、要素の数length、範囲rangeを指定できます。

arr = Array.new(10, 0)
arr.fill(4) {|idx| 2 ** idx }  # 5番目以降を 2 ** idx で置き換え
p arr
[0, 0, 0, 0, 16, 32, 64, 128, 256, 512]

関連項目