高木といいます、よろしく。

二つの配列をそれぞれ集合とみなして、

array1 & array2
array2 - array1

とするのが(内部のコストはたいへんでしょうが)たいへん好きです。

配列の要素が、String やFixnum ではなく、
独自に定義したオブジェクトのインスタンスの場合、
悲しいこと &, -, は私の望みどおりにはなってくれません。

例)
class Some_Class
        def initialize(a1, a2)
                @attr1 = a1
                @attr2 = a2
        end
end

x1 = Some_Class.new("aaa", "bbb")
x2 = Some_Class.new("ccc", "ddd")
x3 = Some_Class.new("eee", "fff")
a1 = [x1, x2, x3]

y1 = Some_Class.new("aaa", "bbb")
y2 = Some_Class.new("xxx", "yyy")
y3 = Some_Class.new("eee", "fff")
a2 = [y1, y2, y3]

p a1 & a2    ← 空の配列が返る。
p a1 - a2    ← a1 そのままが返る。

Object#eql? で判定してるからしかたないんだよ、ってことなんでしょうが、
このような独自に定義したオブジェクトのインスタンスからなる配列の場合にも
集合の積・差が取ることができるメソッドを作るには、
やっぱり、クラスの配列用のクラスをまた定義して、
そのクラスにメソッドをごりごりと書いていくしかないんでしょうか?

なにか汎用的なアプローチがあれば、アドバイスいただきたく。

よろしくお願いします。
-- 
Hiroshi Takagi <gollum / hi-net.zaq.ne.jp>