2012年5月18日金曜日

Perlで重複要素を省いたリストを作る

下記のような実装が綺麗かも

sub merge_dup {
  my @input_list = @_ == 1 ? @{$_[0]} : @_;
  my @output_list = keys %{{map{$_=>1}@input_list}};
  return wantarray ? @output_list : [@output_list];
}

▼流れ
・@input_listを
配列要素=>1,
の形式のハッシュにする

・それを{}で囲んでハッシュレフに変換する

・さらにそれを%{}で囲んでデリファレンスする

・得られたハッシュのkeyのみを取り出せば重複なしリストの出来上がり