On 28.10.2007 14:16, Mohit Sindhwani wrote: > Sean O'Halpin wrote: >> On 10/28/07, Shuaib Zahda <shuaib.zahda / gmail.com> wrote: >> >>> Hello >>> >>> I am trying to output the duplicate elements in an array. I looked into >>> the api of ruby I found uniq method which outputs the array with no >>> duplication. What i want is to know which elements is duplicated. >>> For example >>> >>> array = ["apple", "banana", "apple", "orange"] >>> => ["apple", "banana", "apple", "orange"] >>> array.uniq >>> => ["apple", "banana", "orange"] >>> >>> I want the method to tell me that apple is the duplicated element >>> >>> I tried this but it does not work >>> >>> array - array.uniq >>> >>> any idea >>> >>> Regards >>> Shuaib >>> -- >>> Posted via http://www.ruby-forum.com/. >>> >>> Here's one way (I'm sure there must be a simpler approach - just can't >>> >> think of it right now): >> >> array = ["apple", "banana", "apple", "orange"] >> counts = array.inject(Hash.new {|h,k| h[k] = 0 }) { |hash, item| >> hash[item] >> += 1; hash} >> p counts #=> {"apple"=>2, "banana"=>1, "orange"=>1} >> p counts.select { |k,v| v > 1 }.map{ |k, v| k}.flatten #=> ["apple"] irb(main):007:0> array = %w{apple banana apple orange} => ["apple", "banana", "apple", "orange"] irb(main):008:0> array.inject(Hash.new(0)) {|ha,e| ha[e]+=1;ha}.delete_if {|k,v| v==1}.keys => ["apple"] Kind regards robert