我有2个哈希 - >%a
和%b
。 哈希%a
是temp.txt
加速foreach循环中的perl哈希和更好的算法
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
到temp.txt
中的25144行文字需要30秒。
是否需要为散列散列%a
? 原因是我想要删除%a
中的任何%b{$key}
值。 我还在学习Perl,如果你们有更好的方式来做这件事,非常感谢,可能使用map和grep?和更好的算法?
以前的解决方法
,如果你看到每一个@b比每@a串短,但仍@a内。我曾尝试使用
foreach (@b) {
my $source = $_;
@another = grep !(/$source/i), @a;}
但仍不起作用。我很困惑,于是把这个哈希散列写入%a,并且从@b写出哈希%b只是为了摆脱@a中@b的每个实例值。它出现怪异的散列。笑
你为什么要设置%两次? – ikegami
原因是在“以前的解决方法” – momokjaaaaa
不是不是。它说你从@b制作%b,但你不是。 (好吧,你这样做,但是你完成了所有的工作。) – ikegami