Perl выводит массив хэшей в виде таблицы - PullRequest
3 голосов
/ 27 января 2011

Если у вас есть массив хэшей, где ключ представляет имя столбца, а значение - содержимое строки, что будет лучшим способом вывести его в виде таблицы в perl?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Есть ли в каждой строке одинаковые хеш-ключи? Это структура, которую вы получите, например, из DBI, что соответствует общепринятым свойствам таблиц (то есть каждая строка имеет одинаковый набор столбцов). Вот пример того, что я имею в виду, и я надеюсь, что это соответствует тому, что вы думаете:

my @AoH = (
    {id => 1, name => 'Dick'},
    {id => 2, name => 'Jane'},
);

В таких случаях вы обычно знаете, что такое столбцы. Я собираюсь сделать это предположение. Вот код:

my @cols = qw(id name);
my @AoH;                 # as above

# print the column headings
print join "\t", @cols;

# print values for each row using a hash slice
for my $row_ref (@AoH) {
    print join "\t", @$row_ref{@cols};
}
1 голос
/ 27 января 2011

Как это?

my @AoH = (
    {a => 1, b => 2},
    {c => 3, d => 4},
);

Отображается в N-мерную таблицу, где N - количество элементов в массиве.Вы не можете визуализировать это больше, чем N = 3, если только вы не свернете хэши (т.е. сделаете все это одним большим хешем).

Если вы просто имеете в виду табулирование «обратного» хеша, просто перенесите его:

my %a = (a => 1, b => 1);

my %b = map { $a{$_} => $_ } keys %a;

while ( my ($k, $v) = each %b ) {
    printf( "%s %s\n", $k, $v );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...