我有哈希哈希,在最后一级,我想要附加每个值 - 未更新 - 如果该值已经存在。最好的方法是什么?我正在考虑将值作为列表,但这可能不是最有效的方式......
这是我到目前为止所处的位置:
#!/usr/local/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $dir='D:\';
open my $data,"<","$dir\\file.txt";
my (@selecteddata,@array,%hash);
while (<$data>) {
chomp $_;
my @line= split "\t";
$hash{$line[1]}{$line[2]}=$line[0];
warn Dumper \%hash;
}
close $data;
注意,此代码使用值$line[0]
更新最后一级的值,但如果密钥$line[4]
已存在(意味着,它已具有先前值$line[0]
),我希望这样值被追加而不是更新。
理想情况下,对于以下(tab sepparated)列表:
a1 b1 c1
a2 b2 c2
a3 b3 c3
a4 b4 c4
a5 b4 c4
哈希看起来像这样 - 我不确切地知道a4
和a5
的分组应该是什么样子,所以只要它们被分组就应该没问题:
{
'b1' => {'c1' => 'a1'},
'b2' => {'c2' => 'a2'},
'b3' => {'c3' => 'a3'},
'b4' => {'c4' => 'a4, a5'}
}
答案 0 :(得分:4)
你可以追加你的字符串,
$_ = defined($_) ? "$_, $line[0]" : $line[0]
for $hash{$line[1]}{$line[2]};
或使用更适合存储元素列表的数组
push @{ $hash{$line[1]}{$line[2]} }, $line[0];