Array#uniq with Hash elements... can't remove duplicates

A

andrea

Hello,

I am having some trouble trying to remove duplicate data from an array
of hashes. I've read on the pickaxe book that Array#uniq detects
duplicates using the eql? method on the elements, but it doesn't seem to
work even if I monkeypatch the Hash class:

class Hash
def eql? other
self == other
end
end

a={:foo=>'bar'}
b={:foo=>'bar'}
array=[a,b]

a.eql? b
=> true
array.uniq
=> [{:foo=>"bar"}, {:foo=>"bar"}]

Of course, I'd like to get only [{:foo=>"bar}] as a result. Thanks in
advance for any help...

Andrea
 
M

Marcin Mielżyński

andrea pisze:
Hello,

I am having some trouble trying to remove duplicate data from an array
of hashes. I've read on the pickaxe book that Array#uniq detects
duplicates using the eql? method on the elements, but it doesn't seem to
work even if I monkeypatch the Hash class:

class Hash
def eql? other
self == other
end
end

you also need to define #hash method:

class Hash
def eql? other
self == other
end

def hash
h = 0
each_pair do |k, v|
h ^= k.hash
h *=137
h ^= v.hash
end
h
end
end


lopex
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,731
Messages
2,569,432
Members
44,832
Latest member
GlennSmall

Latest Threads

Top