2014-04-30 36 views
0

我有一個散列哈希值,在最後一級,我想要追加每個值 - 未更新 - 如果該值已經存在。什麼是最好的方法來做到這一點?我在想使值的列表,但是這可能不是最有效的方式...如何在Perl中添加新的散列值

這裏就是我有這麼遠:

#!/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])我希望這個值被附加,而不是更新。

所以,理想情況下,下列(標籤sepparated)名單:

a1 b1 c1 
a2 b2 c2 
a3 b3 c3 
a4 b4 c4 
a5 b4 c4 

哈希會是這個樣子 - 我不知道a4a5分組究竟是如何應該是什麼樣子,所以只要它們的分組應該是確定:

{ 
    'b1' => {'c1' => 'a1'}, 
    'b2' => {'c2' => 'a2'}, 
    'b3' => {'c3' => 'a3'}, 
    'b4' => {'c4' => 'a4, a5'} 
} 

回答

4

您可以將您的字符串,

$_ = defined($_) ? "$_, $line[0]" : $line[0] 
    for $hash{$line[1]}{$line[2]}; 

或使用更適合存儲元素列表的數組,

push @{ $hash{$line[1]}{$line[2]} }, $line[0]; 
相關問題