我有 2 个哈希 -> %a
和%b
. 哈希%a
来自temp.txt
my %a = map{
my $short = substr($_,12);
$count++ => {$short => $_};
} @a;
my %b = map {
$_ => $_;
} @b;
%a = (
'1' => {'We go lunch' => 'We go lunch 9 pm'},
'2' => {'We go break' => 'We go break 8 pm'},
'3' => {'We go lunchy' => 'We go lunchy 8 pm'}
);
%b = (
'We go lunch' => 'We go lunch',
'We go break' => 'We go break',
'We go lunchy' => 'We go lunchy'
);
foreach my $key (keys %a){
foreach my $key2 (keys %{$a{$key}}){
if(exists $b{$key2}){
delete $a{$key}{$key2};
delete $a{$key};
}
}
}
my @another;
foreach my $key ( sort {$a<=>$b} keys %a) {
foreach my $key2 (keys %{$a{$key}}){
$another[$count] = $a{$key}{$key2};
$count++;
}
}
我怎样才能加快速度?我的哈希值很奇怪吗?@another
输出25144 行单词用时30 秒temp.txt
。
是否有必要对哈希进行哈希处理%a
?原因是我希望删除任何%b{$key}
值。%a
如果你们有更好的方法来做这件事,我还在学习 Perl,非常感谢,可能使用 map 和 grep?和更好的算法?
以前的解决方法
如果您看到每个@b 都比每个@a 都短,但仍在@a 内。我曾尝试使用
foreach (@b) {
my $source = $_;
@another = grep !(/$source/i), @a;}
但它仍然不起作用。我很困惑,因此在 %a 中出现了这个哈希值,并从 @b 中生成哈希 %b 只是为了摆脱 @a 中 @b 的每个实例值。结果是奇怪的哈希。哈哈