スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2つの配列の比較

perlでのお話。

あるIDのリスト、AとBがあって、AにあるけどBにはないものを探すみたいな処理が必要になった。そんな処理をさくっとできるコマンドとか定番の手法ってありそうなんだけど、書いたほうが早そうだったから書いてしまった。

↓みたいに各リストをそれぞれ配列に入れて、
open(IN, "< listA.dat");
@list_a = <IN>;
close(IN);

open(IN, "< listB.dat");
@list_b = <IN>;
close(IN);

↓みたいにやってみた
foreach (@list_a){
@arr = grep(/$_/, @list_b);
if($#arr != 0){
print "$_\n";
}
}

これが遅い…。遅すぎる…。まあ見るからに重そうなだもんな。
で、やり方を変えてハッシュを使ってみた。
↓みたいな感じ
open(IN, "< listB.dat");
@list_b = <IN>;
close(IN);

foreach (@list_b){
$LISTB{$_} = 1;
}
foreach (@list_a){
if(!$LISTB{$_}){
print "$_\n";
}
}

前のより断然速い。ちょっとした工夫で結構変わるなぁ。

この記事のトラックバックURL

http://ysmt.blog21.fc2.com/tb.php/58-d08c28d3

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。