配列の重複を取り除く Perl
配列内の要素の重複を取り除きます。
重複のチェックには、
連想配列(ハッシュ)を使います。
連想配列(ハッシュ)を使います。
配列の要素を連想配列のキーとします。
値は何でも構いませんが、
ここでは、値の件数を数えてみようと思います。
値は何でも構いませんが、
ここでは、値の件数を数えてみようと思います。
つまり、配列内に同じ値が3件存在する場合、
連想配列の値が3となるようにしてみます。
連想配列の値が3となるようにしてみます。
#
# 配列の初期化
#
@array = (# 配列の初期化
#
'千葉県',
'東京都',
'神奈川県',
'埼玉県',
'千葉県',
'茨城県',
'栃木県',
'群馬県',
'千葉県',
'栃木県');
#
# 配列の要素をハッシュのキーとし、
# ハッシュの値に1を加算する
#
foreach (@array) {# 配列の要素をハッシュのキーとし、
# ハッシュの値に1を加算する
#
$hash{$_} += 1;
}
print "重複データ\n";
#
# ハッシュの要素をキーと値に分ける
#
while (($key, $value) = each(%hash)) {# ハッシュの要素をキーと値に分ける
#
# 値が1より大きい? (重複)
if (1 < $value) {
#ハッシュのキーと値を出力
print "$key = $value\n";
}
}
#
# ハッシュのキーのみを配列に返す
# 配列は上書きされる
#
@array = keys(%hash);# ハッシュのキーのみを配列に返す
# 配列は上書きされる
#
print "\n";
print "ユニークデータ\n";
#
# 重複除去後の配列を出力
#
foreach (@array) {# 重複除去後の配列を出力
#
print "$_\n";
}
上の例では、
栃木県が2つ
千葉県が3つあり、
重複しています。
栃木県が2つ
千葉県が3つあり、
重複しています。
これを、
ハッシュのキーに代入し、
ハッシュの値を1増加させます。
ハッシュのキーに代入し、
ハッシュの値を1増加させます。
$hash{'千葉県'} = 1;
$hash{'千葉県'} = 2;
$hash{'千葉県'} = 3;
$hash{'千葉県'} = 2;
$hash{'千葉県'} = 3;
イメージとしては、
上のようになります。
この$hash{'千葉県'}にアクセスして、
値を取り出すと、値は3となります。
上のようになります。
この$hash{'千葉県'}にアクセスして、
値を取り出すと、値は3となります。
つまり、
ハッシュのキーは重複が
不可能だということです。
ハッシュのキーは重複が
不可能だということです。
全ての要素にを
ハッシュのキーにした後で、
全てのハッシュ要素を
キーと値に分解しながら
重複チェックを行います。
ハッシュのキーにした後で、
全てのハッシュ要素を
キーと値に分解しながら
重複チェックを行います。
$valに代入されたハッシュの値が、
1より大きければ、
重複なので、
出力します。
1より大きければ、
重複なので、
出力します。
元の配列を、
重複無しの配列で上書きします。
重複無しの配列で上書きします。
最後に、
全配列要素を出力してみます。
栃木県も、
千葉県も
一度しか出力されないと思います。
全配列要素を出力してみます。
栃木県も、
千葉県も
一度しか出力されないと思います。
これで、
配列上の重複の除去が完了です。
配列上の重複の除去が完了です。
| 固定リンク
「Perl」カテゴリの記事
- LWP::Simpleのmirrorをgetに変更した。掲示板監視スクリプト(2014.01.25)
- XMLRPC::Liteで更新Ping(2009.05.29)
- 楽天APIで自動アフィリエイトリンク作成(2009.05.19)
- モジュールをインストールしてみる(2008.01.22)
- Perlでコールバック サブルーチンの引数としてサブルーチンの参照を渡す(2007.11.26)
この記事へのコメントは終了しました。
コメント