重複要素を削除・カウント

back
@array = grep(!$count{$_}++, @array);

%count という(作業用)ハッシュを用意し、配列の要素をキーとしてその値をカウントアップする。
引数の @array を要素0から見ていき、その要素が初めての値の場合は、!$count{$_}が真となり
(インクリメントは評価の後)、grep の戻り値として判定され、結果、@array が受け取る。
2度目以降は、!$count{$_} が偽になるので、grep の戻り値にはならない。

よって、@array は重複行が削除された配列が入る。


ちなみに、$count{'要素名'} に、カウント数が代入されている。
重複数などをカウントする際は、こっちを使う。

back