有没有办法在一个HOA中组合哈希的键和值?让我们说我有一个像
这样的示例输入#NewName OldName
Axc.Sx2.1_Axc.Wx2.1 1BDER
Axc.Sx2.1_Axc.Wx2.1 1ADER
在上面的代码中,哈希值不同但它们的键是相同的,而在下面的代码值是相同的但键是不同的。
Axc.Sx2.1_Axc.Wx2.1 1BDER
Axc.Sx2.1_Axc.Wx2.1 1BDER
Axc.Sx2.1 1BDER
以下代码可以处理值的合并,但无法处理合并的密钥。
while (<$mapF>) {
chomp $_;
next if /^\s*(#.*)?$/;
next if /^\s+.*$/;
##latestRuleName OldRuleName
if ( $_ =~ /(\S+)\s+(\S+)/gi ) {
# create list and append $2
push @{ $mapHash{$1} }, $2;
}
}
请告知。
此致 Divesh
答案 0 :(得分:1)
如果你想要双向关系,那么你只需要两个哈希:
use strict;
use warnings;
my %new2old;
my %old2new;
while (<DATA>) {
my ( $new, $old ) = split ' ';
push @{ $new2old{$new} }, $old;
push @{ $old2new{$old} }, $new;
}
use Data::Dump;
dd \%new2old;
dd \%old2new;
__DATA__
Axc.Sx2.1_Axc.Wx2.1 1BDER
Axc.Sx2.1_Axc.Wx2.1 1ADER
Axc.Sx2.1 1BDER
输出:
{
"Axc.Sx2.1" => ["1BDER"],
"Axc.Sx2.1_Axc.Wx2.1" => ["1BDER", "1ADER"],
}
{
"1ADER" => ["Axc.Sx2.1_Axc.Wx2.1"],
"1BDER" => ["Axc.Sx2.1_Axc.Wx2.1", "Axc.Sx2.1"],
}