【问题标题】:Printing multiple hash value打印多个哈希值
【发布时间】:2021-02-18 20:43:16
【问题描述】:

昨天,我问是否可以打印出这样的东西。 链接: How to print out different values from same key?

元素 A1 和 B1 具有相同的键,这也与 C4D1 相同。但是,A1C4 配对,B1D1 配对。谢谢。

%HASH1

ERROR MESSAGE1 => A1, B1
ERROR MESSAGE2 => A2, B2
ERROR MESSAGE3 => A3, B3
ERROR MESSAGE4 => A4, B4

%HASH2
    
ERROR MESSAGE1 => C4, D1
ERROR MESSAGE2 => C5, D2
ERROR MESSAGE3 => C6, D3
ERROR MESSAGE4 => C7, D4

预期的输出是这样的

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: A1
LINE: C4

ERROR MESSAGE: ERROR MESSAGE1
FULL PATH: B1
LINE: D1

所以我试图弄清楚代码,它看起来像这样。

my %errordata;
for my $key (keys %hash1) {
    $errordata{$key} = [ $hash2{$key}, $hash1{$key} ];
}

use Data::Dumper; 
print Dumper \%errordata;
while (my($k,$v) = each %hash){
print "ERROR MESSAGE: $k\n";
print "PATH: $hash{$k}[0][0]";
print "LINE: $hash{$k}[1][0]";
}

所以我的问题是如何使数字自动递增,即[0][0][1][0]?我应该使用for loop 之类的C 吗?如果是这样,我应该如何在上面的代码中实现它?谢谢。

【问题讨论】:

    标签: perl hash key-value


    【解决方案1】:

    稍微修改代码,问题就解决了。

    use strict;
    use warnings;
    use feature 'say';
    
    my %hash1 = ( 
        'ERROR MESSAGE1' => ['A1','B1'],
        'ERROR MESSAGE2' => ['A2','B2'],
        'ERROR MESSAGE3' => ['A3','B3'],
        'ERROR MESSAGE4' => ['A4','B4']
    );
    
    my %hash2 = (
        'ERROR MESSAGE1' => ['C4','D1'],
        'ERROR MESSAGE2' => ['C5','D2'],
        'ERROR MESSAGE3' => ['C6','D3'],
        'ERROR MESSAGE4' => ['C7','D4']
    );
    
    my %errordata;
    
    for my $key (keys %hash1) {
        $errordata{$key} = [ $hash2{$key}, $hash1{$key} ];
    }
    
    use Data::Dumper; 
    print Dumper \%errordata;
    
    say '--- Loop while --------------';
    while (my($g,$w) = each %errordata)
    {
        say 
    "ERROR MESSAGE: $g
    FULL PATH: $errordata{$g}[1][$_]
    LINE: $errordata{$g}[0][$_]
    " for 0..1;
    }
    
    say '--- Loop for ----------------';
    for my $k ( sort keys %errordata ) {
        say 
    "ERROR MESSAGE: $k
    FULL PATH: $errordata{$k}[1][$_]
    LINE: $errordata{$k}[0][$_]
    " for 0..1;
    }
    

    输出

    $VAR1 = {
              'ERROR MESSAGE4' => [
                                    [
                                      'C7',
                                      'D4'
                                    ],
                                    [
                                      'A4',
                                      'B4'
                                    ]
                                  ],
              'ERROR MESSAGE3' => [
                                    [
                                      'C6',
                                      'D3'
                                    ],
                                    [
                                      'A3',
                                      'B3'
                                    ]
                                  ],
              'ERROR MESSAGE1' => [
                                    [
                                      'C4',
                                      'D1'
                                    ],
                                    [
                                      'A1',
                                      'B1'
                                    ]
                                  ],
              'ERROR MESSAGE2' => [
                                    [
                                      'C5',
                                      'D2'
                                    ],
                                    [
                                      'A2',
                                      'B2'
                                    ]
                                  ]
            };
    --- Loop while --------------
    ERROR MESSAGE: ERROR MESSAGE4
    FULL PATH: A4
    LINE: C7
    
    ERROR MESSAGE: ERROR MESSAGE4
    FULL PATH: B4
    LINE: D4
    
    ERROR MESSAGE: ERROR MESSAGE3
    FULL PATH: A3
    LINE: C6
    
    ERROR MESSAGE: ERROR MESSAGE3
    FULL PATH: B3
    LINE: D3
    
    ERROR MESSAGE: ERROR MESSAGE1
    FULL PATH: A1
    LINE: C4
    
    ERROR MESSAGE: ERROR MESSAGE1
    FULL PATH: B1
    LINE: D1
    
    ERROR MESSAGE: ERROR MESSAGE2
    FULL PATH: A2
    LINE: C5
    
    ERROR MESSAGE: ERROR MESSAGE2
    FULL PATH: B2
    LINE: D2
    
    --- Loop for ----------------
    ERROR MESSAGE: ERROR MESSAGE1
    FULL PATH: A1
    LINE: C4
    
    ERROR MESSAGE: ERROR MESSAGE1
    FULL PATH: B1
    LINE: D1
    
    ERROR MESSAGE: ERROR MESSAGE2
    FULL PATH: A2
    LINE: C5
    
    ERROR MESSAGE: ERROR MESSAGE2
    FULL PATH: B2
    LINE: D2
    
    ERROR MESSAGE: ERROR MESSAGE3
    FULL PATH: A3
    LINE: C6
    
    ERROR MESSAGE: ERROR MESSAGE3
    FULL PATH: B3
    LINE: D3
    
    ERROR MESSAGE: ERROR MESSAGE4
    FULL PATH: A4
    LINE: C7
    
    ERROR MESSAGE: ERROR MESSAGE4
    FULL PATH: B4
    LINE: D4
    
    

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多