Perl リスト内の重複を削除する | でばぐめ -IT技術メモ-

でばぐめ -IT技術メモ-

主にハードウェア/ソフトウェアのプログラミングに関するブログです。


Perlでリスト内の同じ値を取り除きたい場合は、ハッシュを使えば簡単にできます。


my @array = qw(a b a d d d c);

my %hash = ();

foreach (@array) {
$hash{$_}++;
}

my @unique = keys %hash;


foreach 内の $hash{$_}++ は 重複をカウントしていますが、$hash{$_}=1 で重複をカウント
しなくてもよいですね。

重複を取り除く方法は、perlfaq に、いくつか方法が記載されています。

%perldoc -q duplicate


mapを用いた方法

my %hash = map { $_, 1 } @array;
my @unique = keys %hash;


ハッシュスライスを用いた方法

my %hash;
@hash{ @array } = ();
my @unique = keys %hash;

foreachを用いた方法

$hash{$_} = 1 foreach ( @array );
my @unique = keys %hash;


grepを用いた方法

my %hash = ();
my @unique = grep { ! $hash{ $_ }++ } @array;


普段 perlfaqをみることはなく、すぐGoogle検索に頼ってしまうのですが、
perlfaqは色々なノウハウが詰まっていることを改めて感じました。


関連書籍

初めてのPerl 第5版/Randal L. Schwartz

¥3,780
Amazon.co.jp

初心者にもわかりやすく書かれていますが、
全くの初心者というより、少しPerlに慣れてきた時に威力を発揮する本です。
簡単なテキスト操作のためにPerlを使用するのであれば十分事足ると思います。

プログラミングPerl〈VOLUME1〉/ラリー ウォール

¥5,565
Amazon.co.jp

ページ数も多く、価格もそれなりなので、Perlについて詳しく知りたい人向けです。
"初めてのPerl"と重複する箇所も多々あるので、これからがっちりPerlを身につけたい人は
こちらをおすすめします。