2017-10-28 54 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] ];