« ウェブカメラ設置 #3 | トップページ | LinuxでCDを焼く »

2007-07-10

配列の重複を取り除く Perl

配列内の要素の重複を取り除きます
重複のチェックには、
連想配列(ハッシュ)を使います。
配列の要素を連想配列のキーとします。
値は何でも構いませんが、
ここでは、値の件数を数えてみようと思います。
つまり、配列内に同じ値が3件存在する場合、
連想配列の値が3となるようにしてみます。
#
# 配列の初期化
#
@array = (
  '千葉県',
  '東京都',
  '神奈川県',
  '埼玉県',
  '千葉県',
  '茨城県',
  '栃木県',
  '群馬県',
  '千葉県',
  '栃木県');

#
# 配列の要素をハッシュのキーとし、
# ハッシュの値に1を加算する
#
foreach (@array) {
  $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つあり、
重複しています。
これを、
ハッシュのキーに代入し、
ハッシュの値を1増加させます。
$hash{'千葉県'} = 1;
$hash{'千葉県'} = 2;
$hash{'千葉県'} = 3;
イメージとしては、
上のようになります。
この$hash{'千葉県'}にアクセスして、
値を取り出すと、値は3となります。
つまり、
ハッシュのキーは重複
不可能だということです。
全ての要素にを
ハッシュのキーにした後で、
全てのハッシュ要素を
キーと値に分解しながら
重複チェックを行います。
$valに代入されたハッシュの値が、
1より大きければ、
重複なので、
出力します。
元の配列を、
重複無しの配列で上書きします。
最後に、
全配列要素を出力してみます。
栃木県も、
千葉県も
一度しか出力されないと思います。
これで、
配列上の重複の除去が完了です。

|

« ウェブカメラ設置 #3 | トップページ | LinuxでCDを焼く »

Perl」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 配列の重複を取り除く Perl:

« ウェブカメラ設置 #3 | トップページ | LinuxでCDを焼く »