首页 > 解决方案 > 如何在 Perl 中保存哈希的第二维

问题描述

我如何将这些数组按顺序保存到这个数组哈希中,而不是按照字母顺序,只需根据数组保存。

啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

#!/usr/bin/perl 

use warnings;
use strict;
use Tie::IxHash;
use Data::Dumper;

my @NAME= 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 @FAMILY= 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 @COMMUNITY= 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' ;

push @{ $COMMUNITY_FAMILY_NAME{ $COMMUNITY[$_] }{ $FAMILY[$_] } }, $NAME[$_]  for 0 .. $#NAME;
print Dumper(\%COMMUNITY_FAMILY_NAME);

输出:

$VAR1 = {
          '0' => {
                   'A' => [
                            'AA',
                            'AB',
                            'AC',
                            'AD'
                          ],
                   'C' => [
                            'CA',
                            'CB',
                            'CC'
                          ],
                   'B' => [
                            'BA',
                            'BB',
                            'BC'
                          ]
                 },
          '1' => {
                   'A' => [
                            'AA',
                            'AB',
                            'AC'
                          ],
                   'C' => [
                            'CA',
                            'CB',
                            'CC'
                          ],
                   'B' => [
                            'BA',
                            'BB',
                            'BC',
                            'BD',
                            'BE'
                          ]
                 },
          '2' => {
                   'A' => [
                            'AA',
                            'AB',
                            'AC'
                          ],
                   'C' => [
                            'CA',
                            'CB',
                            'CC',
                            'CD',
                            'CE',
                            'CF'
                          ],
                   'B' => [
                            'BA',
                            'BB',
                            'BC'
                          ]
                 }
        };

预期输出:

$VAR1 = {
          '0' => {
                   'A' => [
                            'AA',
                            'AB',
                            'AC',
                            'AD'
                          ],
                   'B' => [
                            'BA',
                            'BB',
                            'BC'
                          ]
                   'C' => [
                            'CA',
                            'CB',
                            'CC'
                          ],
                 },
          '1' => {
                   'A' => [
                            'AA',
                            'AB',
                            'AC'
                          ],
                   'B' => [
                            'BA',
                            'BB',
                            'BC',
                            'BD',
                            'BE'
                   'C' => [
                            'CA',
                            'CB',
                            'CC'
                          ],

                          ]
                 },
          '2' => {
                   'A' => [
                            'AA',
                            'AB',
                            'AC'
                          ],
                   'B' => [
                            'BA',
                            'BB',
                            'BC'
                          ]
                   'C' => [
                            'CA',
                            'CB',
                            'CC',
                            'CD',
                            'CE',
                            'CF'
                          ],
                 }
        };

标签: perl

解决方案


您的子哈希不绑定到Tie::IxHash,因此它们是普通/无序的。您可以tie在使用前通过每个子哈希来更改它。

# push @{ $COMMUNITY_FAMILY_NAME{ $COMMUNITY[$_] }{ $FAMILY[$_] } }, $NAME[$_]  for 0 .. $#NAME;

for (0 .. $#NAME) {
    my $href = $COMMUNITY_FAMILY_NAME{ $COMMUNITY[$_] } ||= do {
        tie my %hash, 'Tie::IxHash';
        \%hash;
    };
    push @{ $href->{ $FAMILY[$_] } }, $NAME[$_];
}

推荐阅读