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を使ったほうが簡潔に記述できる。