我想知道将散列转换为另一个散列的最有效方法是:
{
D1 -> [ A
B
C
]
D2 -> [ A
B
]
D3 -> [ C
A
]
}
我想像这样制作另一个哈希
{
A - > [ D1
D2
D3
]
B -> [ D1
D2
]
C -> [ D1
D3
]
}
我尝试的是 第一:在哈希键中找到唯一的术语,(1 for loop) 第二:制作一个所有这些独特术语都是关键的哈希值 第三步:遍历每个唯一键和每个键,如果它存在,将其添加到(2 for loops) 总而言之,3个循环我不相信是最有效的方式
答案 0 :(得分:4)
这是一种方法:
use strict;
use warnings;
use Data::Dumper;
my %a = ( d1 => ['a','b','c'],
d2 => ['a','b'],
d3 => ['c','a'] );
my %b;
for my $k (sort keys %a) {
push @{$b{$_}}, $k for @{$a{$k}};
}
print Dumper(\%b);
答案 1 :(得分:2)
这是一张非常难以理解的双重地图:
map {
my $k = $_;
map { push( @{ $b{$_} }, $k ) } @{ $a{$_} }
} sort( keys(%a) );
或者与@Mat的回复大致相同。