はじめに
AtCoderの問題をいろいろやっている中で、多重配列について迷ったのでメモ。
やりたいこと
多重配列の中身を1行ずつ改行して表示したい。
実現方法
join
メソッドを使う。
実装例
$ irb 2.4.0 :001 > H,W=3,4 => [3, 4] 2.4.0 :002 > out = Array.new(H).map{ Array.new(W,".")} => [[".", ".", ".", "."], [".", ".", ".", "."], [".", ".", ".", "."]] 2.4.0 :003 > out.each { |data| 2.4.0 :004 > puts data.join 2.4.0 :005?> } . . . . . . . . . . . . => [[".", ".", ".", "."], [".", ".", ".", "."], [".", ".", ".", "."]]
【メモ】区切り文字による出力結果の違い
join
で指定する区切り文字によって、結合される文字列が変化する。
2.4.0 :010 > out.each{|data| puts data.join(", ")} ., ., ., . ., ., ., . ., ., ., . => [[".", ".", ".", "."], [".", ".", ".", "."], [".", ".", ".", "."]] 2.4.0 :011 > out.each{|data| puts data.join(",")} .,.,.,. .,.,.,. .,.,.,. => [[".", ".", ".", "."], [".", ".", ".", "."], [".", ".", ".", "."]] 2.4.0 :012 > out.each{|data| puts data.join("")} .... .... .... => [[".", ".", ".", "."], [".", ".", ".", "."], [".", ".", ".", "."]] 2.4.0 :013 > out.each{|data| puts data.join} .... .... .... => [[".", ".", ".", "."], [".", ".", ".", "."], [".", ".", ".", "."]]