Ruby で多重配列を簡単に生成するメソッド
ブロックを使わずに、簡単に Ruby で多重配列を生成します。Array.make(ar, ob) です。ar は配列で多重度を指定します。ob は初期化因子(初期値)ですが(省略可能)、Array.new とちがって ob をコピーしたものが入ります。なので、初期値の一部を object_id を変えない操作で変更しても、他の値に影響することはありません。
class Array def self.make(ar, ob=nil) raise "Argument class Error" unless ar.class == Array a = ar.dup ar1 = [] a.shift.times {ar1 << (a.empty? ? (ob.dup rescue ob) : Array.make(a, ob))} ar1 end end
実行例。
p Array.make([4, 2, 3], "a") #=>[[["a", "a", "a"], ["a", "a", "a"]], #[["a", "a", "a"], ["a", "a", "a"]], #[["a", "a", "a"], ["a", "a", "a"]], #[["a", "a", "a"], ["a", "a", "a"]]] p a = Array.new(4, "a") #=>["a", "a", "a", "a"] a[0].upcase! p a #=>["A", "A", "A", "A"] a = Array.make([4], "a") a[0].upcase! p a #=>["A", "a", "a", "a"]
野良 Gem 'utils' に追加しました(参照)。