From: Robert Klemme Date: 2007-08-20T06:20:03+09:00 Subject: Re: Detecting duplicates in an array, anything in the standard library ? On 19.08.2007 23:15, Robert Klemme wrote: > On 19.08.2007 12:38, Thibaut Barr�re wrote: >> Hi! >> >> Just wondering if there is something simple already built in the std >> library to remove duplicates from an array (or an enumerable). I've >> seen and used various approaches, like: >> >> module Enumerable >> def dups >> inject({}) {|h,v| h[v]=h[v].to_i+1; h}.reject{|k,v| v==1}.keys >> end >> end >> >> which will give: >> >>> %w(a b c c).dups >> => ["c"] > > Actually you are not deleting duplicates as far as I can see. Did I say it's too late? Man, I should've worn my glasses... > Here's another one > > irb(main):012:0> a.inject(Hash.new(0)) {|h,x| > h[x]+=1;h}.inject([]){|h,(k,v)|h<1;h} > => ["c"] > > You could even change that to need just one iteration through the > original array but it's too late and I'm too lazy. :-) Cheers robert