加入相同的数组值散列
Join same hash of arrays values
我有一组特定数据的散列。我需要操纵哈希值,以便获得如下结果:
预期输出:
key_1=Cell1
Val_1=C3#C4#C1#C2
脚本:
#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper;
use List::Util qw /uniq/;
my %hash = (
'Cell1' => {
'A' => [ 'C1','C2','C1','C2' ],
'B' => [ 'C3','C3','C4','C4' ]
}
);
print Dumper(\%hash);
my $i = 0;
foreach my $key (keys %hash) {
++$i;
print "key_$i=$key\n";
foreach my $refs (keys %{ $hash{$key} }) {
print "Val_$i=", join('#', uniq @{$hash{$key}{$refs}})."\n";
}
}
当前输出:
key_1=Cell1
Val_1=C3#C4
Val_1=C1#C2
如何在这里获得预期的输出?
您可以使用额外的数组 (@cells
) 来存储打印前的值:
foreach my $key (keys %hash) {
++$i;
print "key_$i=$key\n";
my @cells;
foreach my $refs (keys %{ $hash{$key} }) {
push @cells, @{$hash{$key}{$refs}};
}
print "Val_$i=", join('#', uniq @cells)."\n";
}
打印:
key_1=Cell1
Val_1=C3#C4#C1#C2
无法保证顺序,因为您是从哈希中检索密钥的。您可以使用 sort
使订单可预测。
显示的代码一次为每个键使用一个值(对于 A
,然后对于 B
...)。相反,assemble 所有键列表中使用 map
的所有值
my $i = 0;
for my $key (keys %hash) {
++$i;
say "key_$i=$key";
say "Val_$i=",
join "#", uniq map { @{ $hash{$key}->{$_} } } keys %{$hash{$key}};
}
我有一组特定数据的散列。我需要操纵哈希值,以便获得如下结果:
预期输出:
key_1=Cell1
Val_1=C3#C4#C1#C2
脚本:
#!/usr/bin/perl
use strict; use warnings;
use Data::Dumper;
use List::Util qw /uniq/;
my %hash = (
'Cell1' => {
'A' => [ 'C1','C2','C1','C2' ],
'B' => [ 'C3','C3','C4','C4' ]
}
);
print Dumper(\%hash);
my $i = 0;
foreach my $key (keys %hash) {
++$i;
print "key_$i=$key\n";
foreach my $refs (keys %{ $hash{$key} }) {
print "Val_$i=", join('#', uniq @{$hash{$key}{$refs}})."\n";
}
}
当前输出:
key_1=Cell1
Val_1=C3#C4
Val_1=C1#C2
如何在这里获得预期的输出?
您可以使用额外的数组 (@cells
) 来存储打印前的值:
foreach my $key (keys %hash) {
++$i;
print "key_$i=$key\n";
my @cells;
foreach my $refs (keys %{ $hash{$key} }) {
push @cells, @{$hash{$key}{$refs}};
}
print "Val_$i=", join('#', uniq @cells)."\n";
}
打印:
key_1=Cell1
Val_1=C3#C4#C1#C2
无法保证顺序,因为您是从哈希中检索密钥的。您可以使用 sort
使订单可预测。
显示的代码一次为每个键使用一个值(对于 A
,然后对于 B
...)。相反,assemble 所有键列表中使用 map
的所有值
my $i = 0;
for my $key (keys %hash) {
++$i;
say "key_$i=$key";
say "Val_$i=",
join "#", uniq map { @{ $hash{$key}->{$_} } } keys %{$hash{$key}};
}