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