如何解决Perl:组合两个散列数组的值并使第二个数组的值作为输出散列的键
对不起,如果我所说的哈希数组是别的东西。从现在开始,我将把这些东西称为“结构”。 无论如何, 假设我有两个结构:
my @arrayhash;
push(@arrayhash,{'1234567891234' => 'A1'});
push(@arrayhash,{'1234567890123' => 'A2'});
和
my @arrayhash2;
push(@arrayhash2,{'1234567891234' => '567'});
push(@arrayhash2,{'1234567890123' => '689'});
如何获得输出:
@output= {
'567' => 'A1','689' => 'A2',}
任何一个结构中都不会缺少元素,也不会有“undef”值。
解决方法
您可以创建一个临时哈希,用于在两者之间进行映射。
#!/usr/bin/perl
use strict;
use warnings;
my @arrayhash;
push @arrayhash,{'1234567891234' => 'A1'};
push @arrayhash,{'1234567890123' => 'A2'};
my @arrayhash2;
push @arrayhash2,{'1234567891234' => '567'};
push @arrayhash2,{'1234567890123' => '689'};
my %hash; # temporary hash holding all key => value pairs in arrayhash
foreach my $h (@arrayhash) {
while( my($k,$v) = each %$h) {
$hash{$k} = $v;
}
}
my %output;
foreach my $h (@arrayhash2) {
while( my($k,$v) = each %$h) {
$output{$v} = $hash{$k};
}
}
my @output=(\%output);
,
# Build $merged{$long_key} = [ $key,$val ];
my %merged;
for (@arrayhash2) {
my ($k,$v) = %$_;
$merged{$k}[0] = $v;
}
for (@arrayhash) {
my ($k,$v) = %$_;
$merged{$k}[1] = $v;
}
my %final = map @$_,values(%merged);
或
# Build $lookup{$long_key} = $key;
my %lookup;
for (@arrayhash2) {
my ($k,$v) = %$_;
$lookup{$k} = $v;
}
my %final;
for (@arrayhash) {
my ($k,$v) = %$_;
$final{ $lookup{$k} } = $v;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。