我从csv获取数据并在hash中存储数据。从那里我想提供密钥并基于该密钥我想获得Hash的所有值。可以是重复密钥,我想要所有哈希值。
代表:
**SpecID Note_Text**
300000111166 LDPE Bottle/Jar
300000111166 Poly-lined Steel Drum
300000057768 Amber Glass Bottle/Jar
现在,如果我给出密钥:300000111166
我应该得到价值:LDPE瓶/罐,聚乙烯钢桶。如何做到。
答案 0 :(得分:5)
使用数组引用作为哈希值。在查看输入时,push
会为哈希值而不是分配它们。检索哈希值时,请记住必须取消引用哈希值才能看到内容。
while (<FH>) {
($key,$value) = split /\t/;
push @{$hash{$key}}, $value;
}
...
foreach $key (keys %hash) {
print "values for $key: ";
print join(",", @{$hash{$key}}), "\n";
}
使用多维哈希。这种方法的一个优点是重复值不会打印两次(或者这可能是一个缺点,具体取决于您希望如何处理重复值)
while (<FH>) {
($key,$value) = split /\t/;
$hash{$key}{$value}++;
}
...
foreach $key (keys %hash) {
print "values for $key: ";
print join(",", keys %{$hash{$key}}), "\n";
}
对此问题使用经过验证的解决方案:the Tie::Hash::MultiValue
module:
use Tie::Hash::MultiValue;
tie %hash, 'Tie::Hash::MultiValue';
while (<FH>) {
($key,$value) = split /\t/;
$hash{$key} = $value;
}
...
foreach $key (keys %hash) {
print "values for $key: ";
print join(",", @{$hash{$key}}), "\n";
}