【Perl】配列の要素の重複を除去する方法

Perl

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
タイトルとURLをコピーしました