2007/8/20, thomas.macklin / gmail.com <thomas.macklin / gmail.com>: > On Aug 19, 5:16 pm, Robert Klemme <shortcut... / googlemail.com> wrote: > > On 19.08.2007 23:15, Robert Klemme wrote: > > > > > > > > > On 19.08.2007 12:38, Thibaut BarrīĶe 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<<k if v>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 > > or... > > require 'set' > > new_ary = ary.to_set.to_a #set strips dups. It does, but as far as I can see OP wanted exactly the duplicates back. Cheers robert