[#39863] forループの速度 — Masahiro Sato <msato@...>

15 messages 2004/07/20

[#39868] イテレータとfor文 — OOTANI TAKASHI <otn@...5.so-net.ne.jp>

大谷と申します。

31 messages 2004/07/20
[#39886] Re: イテレータとfor文 — Tietew <tietew-ml-ruby-list@...> 2004/07/21

[ruby-list:39822] (要素がString, Fixnum 以外の)配列の集合演算

From: Hiroshi Takagi <gollum@...>
Date: 2004-07-05 07:57:08 UTC
List: ruby-list #39822
高木といいます、よろしく。

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

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>



In This Thread

Prev Next