【发布时间】:2011-05-08 13:47:51
【问题描述】:
如果我有以下数组
my @header_line = ('id', 'name', 'age');
如何从它创建一个与下面一行等效的哈希?
my %fields = { id => 0, name => 1, age => 2};
我想这样做的原因是我可以使用有意义的名称而不是幻数作为索引。例如:
$row->[$fields{age}]; # rather than $row->[2]
【问题讨论】:
-
为什么不将
$row更改为%row(哈希)? -
它来自 Text::CSV 例如,my $row = $csv->getline($fh)
-
既然你有@header_line,你可以很容易地将$row变成一个哈希:
my %row_hash = map { $_ => shift @{$row} } @header_line;。只是另一种选择,但使用$row_hash{age}可能比必须使用$row->[$fields{age}]表示法更干净...... -
既然你有@header_line,你可以很容易地把$row变成一个哈希:my %row_hash; @row_hash{@header_line} = @{$row};。我不得不考虑一下您的代码是如何工作的,而哈希切片要干净得多。
标签: arrays perl data-structures hash