繁体   English   中英

如何以相反的方式打印子哈希的第一个元素 Perl

[英]How to print first element of subhash in reverse manner Perl

我想反向打印每个第一个$family的值,它打印的第一个值是每个$community的总标量值。

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper; 
use Tie::Autotie 'Tie::IxHash';

my @NAMES       = qw(AA AB AC BA BB BC CA CB CC AA AB AC BA BB BC CA CB CC AA AB AC BA BB BC CA CB CC AD CD CE CF BD BE);
my @FAMILIES    = qw(A  A  A  B  B  B  C  C  C  A  A  A  B  B  B  C  C  C  A  A  A  B  B  B  C  C  C  A  C  C  C  B  B);
my @COMMUNITIES = qw(0  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1  2  2  2  2  2  2  2  2  2  0  2  2  2  1  1);

tie my %community_family_name, 'Tie::IxHash' ;

undef $community_family_name{ $COMMUNITIES[$_] }{ $FAMILIES[$_]}{$NAMES[$_]}
    for 0 .. $#NAMES;

for my $community (keys %community_family_name) {
    my $i = 0;
    for my $family (keys %{ $community_family_name{$community} }) {
        for my $name (keys %{ $community_family_name{$community}{$family} }) {
            $community_family_name{$community}{$family}{$name} = $i++;
        }
    }
}

foreach my $community (sort keys %community_family_name)
{
        foreach my $family (keys %{ $community_family_name{$community} }) 
    {
        foreach my $name (keys %{ $community_family_name{$community}{$family}}) 
        {
            print "[$community] = ";
            print scalar "%{ $community_family_name{$community}";
            print reverse "$community_family_name{$community}{$family}{$name}";
            print " ";
        }
    }
}
print Dumper(\%community_family_name);

电流输出:

[0] = HASH(0x1038c80)0 [0] = HASH(0x1038c80)1 [0] = HASH(0x1038c80)2 [0] = HASH(0x1038c80)3 [0] = HASH(0x1038c80)4 [0] = HASH(0x1038c80)5 [0] = HASH(0x1038c80)6 ...

预期输出:

[0] = 10 7 4 0
[1] = 11 8 3 0
[2] = 12 6 3 0 

%community_family_name什么

$VAR1 = {
              '0' => {
                       'A' => {
                                'AA' => [
                                          0
                                        ],
                                'AB' => [
                                          1
                                        ],
                                'AC' => [
                                          2
                                        ],
                                'AD' => [
                                          3
                                        ]
                              },
                       'B' => {
                                'BA' => [
                                          4
                                        ],
                                'BB' => [
                                          5
                                        ],
                                'BC' => [
                                          6
                                        ]
                              },
                       'C' => {
                                'CA' => [
                                          7
                                        ],
                                'CB' => [
                                          8
                                        ],
                                'CC' => [
                                          9
                                        ]
                              }
                     },
               '1' => {
                       'A' => {
                                'AA' => [
                                          0
                                        ],
                                'AB' => [
                                          1
                                        ],
                                'AC' => [
                                          2
                                        ]
                              },
                       'B' => {
                                'BA' => [
                                          3
                                        ],
                                'BB' => [
                                          4
                                        ],
                                'BC' => [
                                          5
                                        ],
                                'BD' => [
                                          6
                                        ],
                                'BE' => [
                                          7
                                        ]
                              },
                       'C' => {
                                'CA' => [
                                          8
                                        ],
                                'CB' => [
                                          9
                                        ],
                                'CC' => [
                                          10
                                        ]
                              }
                     },
               '2' => {
                       'A' => {
                                'AA' => [
                                          0
                                        ],
                                'AB' => [
                                          1
                                        ],
                                'AC' => [
                                          2
                                        ]
                              },
                       'B' => {
                                'BA' => [
                                          3
                                        ],
                                'BB' => [
                                          4
                                        ],
                                'BC' => [
                                          5
                                        ]
                              },
                       'C' => {
                                'CA' => [
                                          6
                                        ],
                                'CB' => [
                                          7
                                        ],
                                'CC' => [
                                          8
                                        ],
                                'CD' => [
                                          9
                                        ],
                                'CE' => [
                                          10
                                        ],
                                'CF' => [
                                          11
                                        ]
                              }
                     }
            };

你快到了。

第一点是您的预期结果是每个community ,因此您的print功能必须保留在第一个循环中。

第二个是你必须使用scalarreverse数组,而不是标量值,如双引号字符串。

# Let me shorten your variable name, that's way too long...
my %cfn = %community_family_name;

foreach my $com (sort keys %cfn) {
    # Count up keys in the community
    my $count = map { keys %{$cfn{$com}->{$_}} } keys %{$cfn{$com}};

    my @vals;
    foreach my $family (reverse sort keys %{$cfn{$com}}) {
        my ($first) = sort keys %{$cfn{$com}->{$family}};
        push @vals, @{$cfn{$com}->{$family}->{$first}};
    }

    printf "[%d] = %s", $com, join q{ }, $count, @vals;
    print "\n";
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM