如何将数组推入嵌套哈希

时间:2017-10-28 13:26:48

标签: perl

有没有人可以解释我如何将数组推入嵌套哈希。假设我创建了一个嵌套的哈希,并希望将数组推入key,这是另一个键的值,以及如何访问这些数组值。请原谅,如果我在解释我的查询时技术错误。

以下是我的代码的一部分:

    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];
     }

2 个答案:

答案 0 :(得分:0)

使用方括号表示匿名数组。使用花括号进行匿名哈希。

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

答案 1 :(得分: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");
}

希望上面的代码对您有用。如果您需要任何进一步的帮助,请在评论中告诉我。