Perlで配列内の重複要素を除去する方法を紹介します。重複除去後の配列について、元の並び順を維持したい場合と、維持が不要な場合があり、維持が不要な場合の方が行数が少なく済みます。
サンプルコード1:元の順番を保持したい場合
ハッシュを使用し、一度も出現したことがない要素を配列@uniqueに保持します。
#!/usr/bin/perl
use strict;
use warnings;
# 重複が含まれる配列の初期化
my @array = ('apple', 'banana', 'apple', 'orange', 'banana', 'pear');
# 重複を除去した配列を格納するためのハッシュ
my %hash = ();
# 重複除去後の要素を格納する配列
my @unique = ();
foreach my $item (@array) {
# %hashのキーとして$itemが存在しない場合、その要素を@uniqueに追加
if (!exists($hash{$item})) {
push(@unique, $item); # @unique配列に$itemを追加
$hash{$item} = 1; # %hashハッシュに$itemをキーとして追加
}
}
# 重複除去後の配列を表示
foreach my $item (@unique) {
print "$item\n";
}
実行結果
apple
banana
orange
pear
サンプルコード2:順番が元通りでなくても良い場合
出現した要素をハッシュのキーとして保持します。重複を除去した結果は keys %hash で取得できます。
#!/usr/bin/perl
use strict;
use warnings;
# 重複が含まれる配列の初期化
my @array = ('apple', 'banana', 'apple', 'orange', 'banana', 'pear');
# 重複を除去した配列を格納するためのハッシュ
my %hash = ();
foreach my $item (@array) {
# %hashのキーとして$itemが存在しない場合、その要素を@uniqueに追加
if (!exists($hash{$item})) {
$hash{$item} = 1; # %hashハッシュに$itemをキーとして追加
}
}
# 重複除去後の配列を表示
foreach my $item (keys %hash) {
print "$item\n";
}
実行結果
banana
apple
orange
pear
まとめ
本記事では、Perlで配列の要素の重複を除去する方法を紹介しました。