|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 ... Andrea -- http://myretrocomputing.altervista.org |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Marcin Miel?y?ski <lopx@gazeta.pl> wrote:
> you also need to define #hash method: Thank you ! Andrea -- http://myretrocomputing.altervista.org |
|
![]() |
| Outils de la discussion | |
|
|