-1

ハッシュのハッシュをログ ファイルのテーブルに ASCII 形式で出力しようとしています。私はハッシュを持っています。その値は再びハッシュであり、その値はリストです:

irb(main):057:0> h = {  
irb(main):058:1* 'mode1' => {
irb(main):059:2*    'name1' => [2, 4],
irb(main):060:2*    'name2' => [54, 65]
irb(main):061:2>    },
irb(main):062:1*  'mode2' => {
irb(main):063:2*     'name4' => [3, 0],
irb(main):064:2*     'name3' => [2, 1]
irb(main):065:2>     },
irb(main):066:1*  'mode3' => {
irb(main):067:2*     'xys' => [100, 28]
irb(main):068:2>     }
irb(main):069:1>  }

次のように印刷したい:

**************************************************************************************
| No    |       Mode Name       |     Sub Name         | Value 1       |   Value 2   |
**************************************************************************************
|   1   |       mode1           |     name1            |     2         |      4      |
|       |                       |     name2            |     54        |      65     |
--------------------------------------------------------------------------------------
|   2   |       mode2           |     name4            |     3         |      0      |
|       |                       |     name3            |     2         |      1      |
--------------------------------------------------------------------------------------
|   3   |       mode3           |     xys              |     100       |      28     |
**************************************************************************************
  1. これを達成する簡単な方法はありますか?
  2. を使用して独自の方法を試していますprintfが、ブロックを使用して中央揃えする方法を理解できずhash.each、内部ハッシュに複数のキーがあるとスタックします。1 列目と 2 列目を印刷する必要はありません。

を使用してruby 1.8.6 (2009-08-04 patchlevel 383)います。

4

1 に答える 1

0

「Rubyで配列を反復処理する「正しい」方法は何ですか?」に基づく:

puts "*" * <number of asterisks>
puts "|\tNo\t|\tMode\t|..."
puts "*" * <number of asterisks>

number = 1
for mode in h.keys.sort
    first = true
    for subkey in mode.keys.sort
        if first
            puts "|\t#{number.inspect}\t|\t#{h[mode].inspect}\t|\t#{subkey.inspect}\t|..."
            first = false
        else
            puts "|\t\t|\t\t|\t#{subkey.inspect}\t|..."
        end
        puts "-" * <number of dashes>
    end
    number += 1
end
于 2013-08-08T13:31:03.543 に答える