[#40891] 配列をシャッフル — Hideo Konami <konami@...>

小波です。

25 messages 2005/07/01
[#40899] Re: 配列をシャッフル — ktokita <ktokita-p@...> 2005/07/01

時田です

[ruby-list:40942] Re: オブジェクト配列の単一化は?

From: "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
Date: 2005-07-27 09:48:00 UTC
List: ruby-list #40942
山本です。

>eql?の再定義がうまくいっていないのでしょうか?

eql? を再定義した場合は、hash も再定義する必要があります。

http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Object#eql.3f

というわけで、こんな感じでしょうか。

class Hoge
  def initialize( n )
    @name = n
  end
  def eql?( otr )
    @name.eql?( otr.name )
  end
  def hash # a.eql?(b) が成り立つときは a.hash == b.hash でないといけない
    @name.hash # なので、 @name.hash + 1039 なんてものでも OK ?
  end
  attr_accessor :name
end

dat = [ Hoge.new( "hoge" ),
        Hoge.new( "hage" ),
        Hoge.new( "boke" ),
        Hoge.new( "hage" ),
        Hoge.new( "boke" ) ]
dat.uniq!

dat.each do |d| 
  print d.name,"\n" 
end



In This Thread