Perl: создать хеш из массива - PullRequest
3 голосов
/ 11 ноября 2010

Если у меня есть следующий массив

my @header_line = ('id', 'name', 'age');

Как создать из нее хеш, эквивалентный строке ниже?

my %fields = { id => 0, name => 1, age => 2};

Причина, по которой я хочу это сделать, заключается в том, что я могу использовать значимые имена, а не магические числа для индексов. Например:

$row->[$fields{age}]; # rather than $row->[2] 

Ответы [ 5 ]

15 голосов
/ 11 ноября 2010
my %fields;
@fields{@header_line} = (0 .. $#header_line);
6 голосов
/ 11 ноября 2010
my %fields = map { $header_line[$_] => $_ } 0..$#header_line;
2 голосов
/ 12 ноября 2010

Вы сказали в ответ на комментарий, что это исходит от Text :: CSV. В этом модуле есть способ импортировать его в хеш для вас.

$csv->column_names( @header_line );<br /> $row = $csv->getline_hr( $FH );<br /> print $row->{ 'id' };

1 голос
/ 11 ноября 2010
my %fields = ();
for (my $i = 0; $i < scalar(@header_line); $i++) {
   $fields{$header_line[$i]} = $i;
}
0 голосов
/ 11 ноября 2010

TIMTOWTDI

my %fields = ();
foreach my $field(@header_line)
{
  %fields{$field} = scalar(keys(%fields));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...