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
削除したいからです。おそらくmapとgrepを使用して、これを行うためのより良い方法があれば、私はまだPerlを学んでいます。そしてより良いアルゴリズム?
以前の回避策
すべての@bがすべての@aよりも短い文字列であるが、それでも@a内にある場合。使ってみた
foreach (@b) {
my $source = $_;
@another = grep !(/$source/i), @a;}
しかし、それでも機能しません。私は混乱していたので、このハッシュのハッシュを%aに入れ、@ bからハッシュ%bを作成して、@aの@bのすべてのインスタンス値を削除しました。これは奇妙なハッシュとして出てきます。笑