Perl:如何使用循环中的数组值访问哈希?

Perl:如何使用循环中的数组值访问哈希?,perl,Perl,我已将数组定义为值的哈希: %myhash = ( 'key1' => [ 'key1value1', 'key1value2' ], 'key2' => [ 'key2value1', 'key2value2' ], ....... 'key100' => [ 'key100value1', 'key100value2' ] ); 如何使用循环访问每个键的值 基本上,我想做一些事情,比如: print

我已将数组定义为值的哈希:

%myhash = ( 'key1' => [ 'key1value1', 'key1value2' ],
            'key2' => [ 'key2value1', 'key2value2' ],
            .......
            'key100' => [ 'key100value1', 'key100value2' ] );
如何使用循环访问每个键的值

基本上,我想做一些事情,比如:

print "$myhash{'key1'}->[0]   and  $myhash{'key1'}->[1]\n";
print "$myhash{'key2'}->[0]   and  $myhash{'key2'}->[1]\n";
.......
print "$myhash{'key100'}->[0]   and  $myhash{'key100'}->[1]\n";
以单独的行打印每个键的这两个数组值

我尝试在for/while循环中使用索引,但没有成功

提前感谢您的建议

这里有一种方法:

%myhash = ( 'key1' => [ 'key1value1', 'key1value2' ],
            'key2' => [ 'key2value1', 'key2value2' ],
            'key3' => [ 'key3value1', 'key3value2' ] );

for my $k (sort keys %myhash)
{
    print "$myhash{$k}->[0] $myhash{$k}->[1]\n";
}
如果阵列元素的数量不同:

for my $k (sort keys %myhash)
{
    for my $v (@{$myhash{$k}})
    {
        print "$v ";
    }
    print "\n";
}
这里有一个方法:

%myhash = ( 'key1' => [ 'key1value1', 'key1value2' ],
            'key2' => [ 'key2value1', 'key2value2' ],
            'key3' => [ 'key3value1', 'key3value2' ] );

for my $k (sort keys %myhash)
{
    print "$myhash{$k}->[0] $myhash{$k}->[1]\n";
}
如果阵列元素的数量不同:

for my $k (sort keys %myhash)
{
    for my $v (@{$myhash{$k}})
    {
        print "$v ";
    }
    print "\n";
}
另一个解决方案:

print map {  join(" ", @{ $myhash{$_} }, "\n") } sort keys %myhash;
(简洁的方式)

另一种解决方案:

print map {  join(" ", @{ $myhash{$_} }, "\n") } sort keys %myhash;

(简洁的方式)

这里是我的解决方案……只是为了好玩,也许更简洁。不确定是否可以进一步压缩:

print join ' ', @$_, "\n" for @myhash{sort keys %myhash};
适用于
%myhash
中的任意长值数组

编辑:

正如simbabque在评论中指出的那样,它确实可以进一步压缩。谢谢你的提示

say join ' ', @$_ for @myhash{sort keys %myhash}; # requires: use feature 'say';

这里是我的解决方案…只是为了好玩,也许更简洁。不确定是否可以进一步压缩:

print join ' ', @$_, "\n" for @myhash{sort keys %myhash};
适用于
%myhash
中的任意长值数组

编辑:

正如simbabque在评论中指出的那样,它确实可以进一步压缩。谢谢你的提示

say join ' ', @$_ for @myhash{sort keys %myhash}; # requires: use feature 'say';

正是我想要的。。。即使阵列元素的数量发生变化。非常感谢你!请不要发表“谢谢”的评论。你通过投票选出有用的答案并接受解决问题的答案(你已经做了)来表达感谢。你应该拿着,去看看,读一读。他有56k,我想他知道这个^^^不,OP有18个正是我想要的。。。即使阵列元素的数量发生变化。非常感谢你!请不要发表“谢谢”的评论。你通过投票选出有用的答案并接受解决问题的答案(你已经做了)来表达感谢。他有56k,我想他知道这个^^^不,OP有18个使用
来缩短它。但我们不是在玩代码高尔夫。简短并不一定更简洁。有时它只是更难阅读非常好,谢谢!没有代码高尔夫,只有一点点perl精神;)使用
,使其变短。但我们不是在玩代码高尔夫。简短并不一定更简洁。有时它只是更难阅读非常好,谢谢!没有代码高尔夫,只有一点点perl精神;)