軽量日記 by adokoy

Perlで集合を扱う

Perlで集合を扱うなら,CPANモジュールのSet::Objectが良さそう.ちなみに「集合を扱う」というのは,和集合,共通部分,差集合,対称差,真部分集合の判定ぐらいの感覚で.

車輪の再発明的なものはdankogaiさんのブログに解説付きで既にあった.

[perl - 配列の∪と∩] http://blog.livedoor.jp/dankogai/archives/51441112.html

[perl - にも集合オブジェクトと演算を] http://blog.livedoor.jp/dankogai/archives/51442760.html

割りと簡単に作れるので,CPANモジュールインストールどころかpackageを作るまでも無いだろうということで,Gistにサブルーチンのセットをメモ代わりに書いてみた.

https://gist.github.com/adokoy001/7890136538e3c979e339d0f1b890eab3

「ハッシュのkeyを取るだけでいいじゃん」っていう箇所があるので後々修正しようかな・・・.

地味に和集合,共通部分,対称差については3つ以上の集合にも対応しておいた(絶妙にそういう機能が必要になることもあるので)

対称差については,「その要素を含む集合の数が奇数であれば,対称差の集合に入る」ようになっているので直感的に「おや?」と思うかもしれないが,3入力以上のXORと同じ振る舞いだと考えれば違和感は無くなるかも.

created by
Toshiaki Yokoda
created at
last modified by
Toshiaki Yokoda
last modified at
2016-09-21 02:51