From: Robert Klemme Date: 2007-10-29T23:33:23+09:00 Subject: Re: uniq on custom objects 2007/10/29, daniel åkerud : > I cannot get uniq to work with an array of custom class-objects. It seems > overriding hash is now enough. This is what I mean: > > class Obj > attr_reader :name, :number > def initialize(name, number) > @name = name > @number = number > end > def hash > return @name.hash > end > end > > a = [Obj.new("apa", 1), Obj.new("apa", 2), Obj.new("smisk", 3)] > > => [#, # @name="apa">, #] > > a.uniq > > => [#, # @name="apa">, #] > > But i want only one instance of "apa", and it doesn't matter which. Is there > something else I have to override? You can make your life much easier by using Struct: Obj = Struct.new :name do attr_accessor :number def initialize(name, number) self.name = name self.number = number end end irb(main):008:0> a = [Obj.new("apa", 1), Obj.new("apa", 2), Obj.new("smisk", 3)] => [#, #, #] irb(main):009:0> a.uniq => [#, #] Kind regards robert