我想使用2个数组进行哈希处理
use warnings;
use strict;
use List::MoreUtils;
use Tie::IxHash;
my %KEY_VALUE;
tie %KEY_VALUE,'Tie::IxHash';
my @KEY= qw(
0
0
5
1
1
1
2
2
2
2
3
4
);
my @VALUE= qw(
A
B
C
D
E
F
G
H
I
J
K
L
);
@KEY_VALUE{@KEY}=@VALUE;
print join("\t",%KEY_VALUE);
我得到的结果是:
0 B 5 C 1 F 2 J 3 K 4 L
这是因为%KEY_VALUE的值会不断更新为,在这种情况下,它只能有1个键和1个值。
所以,我想知道是否有一种方法可以保存所有值及其对应的键。
预期结果:
0 A B 5 C 1 D E F 2 G H I J 3 K 4 L
答案 0 :(得分:5)
只需将值推送到每个键下存储的数组引用即可。但是,您不能直接输出结构。
#!/usr/bin/perl
use warnings;
use strict;
use Tie::IxHash;
tie my %key_value,'Tie::IxHash';
my @keys = qw( 0 0 5 1 1 1 2 2 2 2 3 4 );
my @values = qw( A B C D E F G H I J K L );
push @{ $key_value{ $keys[$_] } }, $values[$_] for 0 .. $#keys;
print join ' ', map "$_ @{ $key_value{$_} }", keys %key_value;
答案 1 :(得分:2)
听起来像是哈希值,其中的值是arrayrefs,其中包含与这两个数组中给定键对应的所有值?像这样:
#!/usr/bin/perl
use warnings;
use strict;
use Tie::IxHash;
# Install from CPAN or your OS's package manager; not a core module
use List::MoreUtils qw/each_array/;
tie my %KEY_VALUE,'Tie::IxHash';
my @KEY = qw(0 0 5 1 1 1 2 2 2 2 3 4);
my @VALUE = qw(A B C D E F G H I J K L);
my $ea = each_array @KEY, @VALUE;
while (my ($k, $v) = $ea->()) {
push @{$KEY_VALUE{$k}}, $v;
}
while (my ($k, $av) = each %KEY_VALUE) {
print "$k @$av ";
}
print "\n";