如何从同一个键打印出不同的值? [英] How to print out different values from same key?

查看:53
本文介绍了如何从同一个键打印出不同的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个具有相同密钥但值不同的哈希值.

I have a two hashes with the same key but different values.

%HASH1

ERROR MESSAGE1 => A1
ERROR MESSAGE2 => A2
ERROR MESSAGE3 => A3
ERROR MESSAGE4 => A4

%HASH2

ERROR MESSAGE1 => C4
ERROR MESSAGE2 => C5
ERROR MESSAGE3 => C6
ERROR MESSAGE4 => C7

我的代码如下

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

use Data::Dumper; 
print Dumper \%errordata;

所以,我的问题是,如何根据上面的代码在没有第一个哈希值的情况下打印值?因为我尝试执行while循环,但显示的却是ARRAY(0x2113a30).

So, my question is how can I print the values without the first hash's values based on the code above? because I tried doing a while loop but it shows the ARRAY(0x2113a30) instead.

while (my($g,$w) = each %errordata)
{
   print "$_" for @{$w};
}

谢谢.

编辑

输出应该是这样的

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

推荐答案

请调查以下代码以确保符合您的问题.

Please investigate following piece of code for compliance of your problem.

注意:while( my($g,$w) = each %errordata )不会基于键顺序对对进行排序 (改为将forsort keys %errordata结合使用)

NOTE: while( my($g,$w) = each %errordata ) will not order pairs base on key order (use for with sort keys %errordata instead)

use strict;
use warnings;
use feature 'say';

my %hash1 = ( 
    'ERROR MESSAGE1' => 'A1',
    'ERROR MESSAGE2' => 'A2',
    'ERROR MESSAGE3' => 'A3',
    'ERROR MESSAGE4' => 'A4'
);

my %hash2 = (
    'ERROR MESSAGE1' => 'C4',
    'ERROR MESSAGE2' => 'C5',
    'ERROR MESSAGE3' => 'C6',
    'ERROR MESSAGE4' => 'C7'
);

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

say '--- Loop for ----------------';
for( sort keys %errordata ) {
    say 
"ERROR MESSAGE: $_
FULL PATH: $errordata{$_}[1]
LINE: $errordata{$_}[0]";
}

输出

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

这篇关于如何从同一个键打印出不同的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆