下リンクの逆変換を行う内容である。Rubyのデータ構造をテキスト化する。
Rubyのデータ構造
data = [ {:id => "a", :val1 => [1, 2, 3], :val2 => [3, 4]}, {:id => "b", :val1 => [0], :val2 => [9, 8, 7]} ]
変換後のテキスト
id | val1 | val2 |
---|---|---|
a | 1 | 3 |
2 | 4 | |
3 | ||
b | 0 | 9 |
8 | ||
7 |
変換スクリプト
data = [ {:id => "a", :val1 => [1, 2, 3], :val2 => [3, 4]}, {:id => "b", :val1 => [0], :val2 => [9, 8, 7]} ] # ヘッダーを出力 puts data.first.keys.join("\t") # データを処理して表形式に出力 data.each do |entry| id = entry[:id] val1 = entry[:val1] val2 = entry[:val2] # val1 と val2 の要素数の最大値を取得して、ループをその回数だけ繰り返す max_length = [val1.length, val2.length].max max_length.times do |i| # idの値は最初の行のみ表示し、それ以外の行は空白にする id_output = (i == 0 ? id : "") # val1 と val2 の要素があれば出力し、なければ空白を表示 val1_output = (val1[i].nil? ? "" : val1[i]) val2_output = (val2[i].nil? ? "" : val2[i]) puts [id_output, val1_output, val2_output].join("\t") end end
- 値が存在しない場合は、
""
を代入するところがポイント
出力結果
id val1 val2 a 1 3 2 4 3 b 0 9 8 7
ひどいな。ひどい世の中だ。