🐷

[Feature #21284] 任意の値を埋めた状態でサイズを変更できるメソッドを追加する提案

に公開

[Feature #21284] Request: add Array#pad method

  • Array#fill では任意の範囲を任意の要素で置き換えることができる
ary = [1, 2, 3]

# 0〜2 の範囲を "homu" に置き換える
ary.fill("homu", 0..2)
pp ary # => ["homu", "homu", "homu"]
  • このときに範囲外を指定するとそのサイズまで含めて置き換えがされる
ary = [1, 2, 3]

# 0〜4 の範囲を "homu" に置き換える
ary.fill("mami", 0..4)
pp ary # => ["mami", "mami", "mami", "mami", "mami"]
  • この亜種として『指定されたサイズになるように配列の長さが調整され、はみ出た部分は任意の要素に置き換える』という Array#pad メソッドを追加する提案
class Array
  # 内部的にはこういう挙動を想定
  def pad(pad_to_length, object = nil)
    fill(object, size, pad_to_length - size)
  end
end


ary = [1, 2, 3]

# サイズが 5 になるように調整される
# はみ出た部分は "homu" で置き換えられる
ary.pad(5, "homu")
pp ary # => [1, 2, 3, "homu", "homu"]

# ary のサイズを超えなければ何もしない
ary.pad(3, "mami")
pp ary # => [1, 2, 3, "homu", "homu"]
  • 要は『追加される要素だけ任意の値で埋めておきたい』みたいな挙動ですね
  • これ系はパッとユースケースは思いつかないんですが過去にこういうのほしかったケースはあった気がするんですよね〜〜〜〜
ary = [1, 2, 3]
ary.fill(nil, ary.size..10)
pp ary
  • Ruby の機能にはないんですが『先端を排他する構文があれば以下のようにかける』というコメントが来てますね
# ^.. が先頭を排他する構文想定
# -1 が size-1 相当なのでそれは含まずに 10個分 nil で埋める、みたいな意味
ary.fill(nil, -1^..10)
GitHubで編集を提案

Discussion