2017-10-28 74 views
-1

有沒有人可以解釋如何將數組推入嵌套散列。假設我創建了一個嵌套散列,並且希望將一個數組推入另一個鍵的值中,以及如何訪問這些數組的值。對不起,如果我在解釋我的查詢時在技術上是錯誤的。如何將數組推送到嵌套散列

這裏是我的代碼部分:

if ($line !~ /#/) 
    { 
      @region = split /\t/, $line; 
      @ancestor = split /:/, $region[8]; 
      my @div = split /\s/, $ancestor[0]; 
      push @value, {$region[3],$region[4]}; 
      #print "$region[3],$region[4]\n"; 
      push @{$hash{$div[1]}{$region[0]}},$region[3],$region[4]; 
    } 
+3

向我們展示您迄今嘗試過的代碼。 –

+0

您需要使用對數組的引用。散列鍵只能包含標量。 –

+2

Push在這裏是錯誤的詞。您可以將值推入數組中,但您所描述的是您希望將現有數組的引用存儲爲散列引用中的鍵的值。 – simbabque

回答

0

以下是創建多維散列的代碼。

my $filename = 'out.txt'; 
my %hash =(); 
open(my $fh, $filename) or die "Could not open file '$filename' $!"; 
while (my $line = <$fh>) { 
     chomp $row; 
     if ($line !~ /#/) 
     { 
       @region = split /\t/, $line; 
       $len = scalar @region; 
       if($len >8){ 
         @ancestor = split /:/, $region[8]; 
         my @div = split /\s/, $ancestor[0]; 
         push @value, {$region[3],$region[4]}; 
         push @{$hash{$div[1]}{$region[0]}},[$region[3],$region[4]]; 
       } 
     } 
} 

現在訪問,您可以使用下面的代碼的哈希:

for my $key1 (keys %hash) { 
     print("Hello $key1"); 
     for my $key2 (keys %{$hash{$key1}}){ 
       print("\t$key2\n"); 
       @res = @{$hash{$key1}{$key2}}; 
       foreach my $arr(@res){ 
         print("\t\t"); 
         print join(",", @{$arr}), "\n"; 
       } 

     } 
     print("\n"); 
} 

希望上面的代碼會爲你。如果你的工作需要任何進一步的幫助,讓我知道在評論中。

0

用方括號匿名數組。使用大括號進行匿名哈希。

push @value, [ $region[3], $region[4] ]; 
    push @{$hash{$div[1]}{$region[0]}}, [ $region[3], $region[4] ];