2009年04月22日

[Perl] 2つの配列の積集合、和集合、差集合を得る

Perlは問題点の多い言語と言われますが、やはり実用性は本当に高いな、と思う今日このごろ。大きなプログラムを書いても遅くならないし。

さて、2つの配列の積集合(共通する要素)、和集合(いずれか一方または両方に含まれる要素)、差集合(一方にのみ含まれる要素)を求めるには、List::Compare が便利みたいなので試してみた。

#!/usr/bin/perl

use List::Compare;

# 比較する二つの配列
my @list1 = ('a', 'b', 'c');
my @list2 = ('b', 'c', 'd');

my $lc = List::Compare->new(\@list1, \@list2);

# 積集合 (@list1, @list2 両方の配列に含まれる要素)
my @intersection = $lc->get_intersection;
print "@intersection \n";
 # prints b c

# 和集合(@list1, @list2 のすべての要素から重複を取り除いたもの)
my @union = $lc->get_union;
print "@union \n";
 # prints a b c d

# 差集合 (@list1にのみ含まれる要素)
my @list1only = $lc->get_Lonly;
print "@list1only \n";
 # prints a

# 差集合 (@list2にのみ含まれる要素)
my @list2only = $lc->get_Ronly;
print "@list2only \n";
 # prints d

より詳しくは: http://search.cpan.org/dist/List-Compare/lib/List/Compare.pm

差集合だけで良い場合は Array::Diffでも良いみたい。

posted by dev-man at 00:48| Comment(0) | TrackBack(0) | Perl | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック