テクデップ(Techdep)

コンピュータ、プログラミング、DTP(InDesign)に関する備忘録

Perlで配列の重複要素の取出しと削除

 Perlにおける配列値の重複や削除といった操作をするにはgrep関数を利用すれば良いけれども、書いては忘れ調べ直しを繰り返している。いい加減覚えるために、メモ書きとして以下に残す。

 ある配列の重複する要素を排除するには以下の様に書く。

my %tmp;
my @uniq = grep { $tmp{$_}++ < 1; } (@array);

 逆に配列の重複した要素だけを取り出すには、grep関数を二回通す。

my (%tmp, %tmp2);
my @not_uniq = grep { $tmp2{$_}++ < 1; } (grep { $tmp{$_}++ >= 1; } (@array));

 foreachを利用しても上記処理が実現できるけれども、grepを使ったほうが簡潔に記述できる。