From: Daniel Harple Date: 2006-04-11T20:07:37+09:00 Subject: Re: Duplicity in Set On Apr 11, 2006, at 12:28 PM, Radek Skokan wrote: > I have a Set which should contains elements of my object Component. > The > component class implements method hash. I'm gathering data, createing > Componets from them and storing it into the Set. It's a Set just to > prevent > duplicates. But finally the Set contains duplicate elemets -- with > the same > hash value. You must implement #eql? and #hash -- require 'set' class Component attr_accessor :attributes attr_reader :name, :subcomponents def initialize(name) @name = name @attributes = {} @subcomponents = [] end def inspect() %{<%s hash=%#x @name=%s>} % [self.class.name, self.hash, @name.inspect] end def eql?(other) @name.eql?(other.name) end def hash() @name.hash end end components = Set.new components << Component.new("foo") components << Component.new("bar") components << Component.new("foo") components.each { |c| puts c.inspect } -- Daniel