# Re: how to get only the duplicatet items from an array

**URL:** <https://www.ruby-forum.com/t/re-how-to-get-only-the-duplicatet-items-from-an-array/73885>\
**Category:** Ruby\
**Created:** [October 27, 2006, 7:56pm UTC](https://www.ruby-forum.com/t/re-how-to-get-only-the-duplicatet-items-from-an-array/73885 "2006-10-27T19:56:10Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [October 27, 2006, 7:56pm UTC](https://www.ruby-forum.com/t/re-how-to-get-only-the-duplicatet-items-from-an-array/73885/1 "2006-10-27T19:56:10Z")

</div>

From: Nico L. [[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)]

> is there a oneline to get only the duplicatet item from an array?
> 
> i have an array like this  
> aTemp = [1, 1, 2, 2, 3, 4]  
> and i want to know, which items are duplicatet.

There are faster ways to do this, but since you asked for a one-line:  
a = [1, 1, 2, 2, 3, 4]  
duplicates = a.delete\_if{ |x| a.grep(x).length == 1 }.uniq  
#=\> [1, 2]

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [October 27, 2006, 8:04pm UTC](https://www.ruby-forum.com/t/re-how-to-get-only-the-duplicatet-items-from-an-array/73885/2 "2006-10-27T20:04:11Z")

</div>

thanks, yes sir,  
thats really what i’m looking for.  
could you please post your fast way.

nico

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [October 27, 2006, 9:12pm UTC](https://www.ruby-forum.com/t/re-how-to-get-only-the-duplicatet-items-from-an-array/73885/3 "2006-10-27T21:12:06Z")

</div>

Nico L. wrote:

> thanks, yes sir,  
> thats really what i’m looking for.  
> could you please post your fast way.

Use Set:

irb(main):006:0\> a = [1,1,2,2,3,3,4,4]  
=\> [1, 1, 2, 2, 3, 3, 4, 4]  
irb(main):007:0\> Set.new(a)  
=\> #\<Set: {1, 2, 3, 4}\>

I don’t know if it’s faster, but it look better IMO.

---

<div class="post-metadata">

**Author:** ![phrogz](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/2acd7d/32.png) [@phrogz](https://www.ruby-forum.com/u/phrogz)\
**Post date:** [October 28, 2006, 8:54pm UTC](https://www.ruby-forum.com/t/re-how-to-get-only-the-duplicatet-items-from-an-array/73885/4 "2006-10-28T20:54:50Z")

</div>

another possibility:

> > a=[‘a’,‘b’,7,77,‘a’,‘ba’,3,7]  
> > =\> [“a”, “b”, 7, 77, “a”, “ba”, 3, 7]
> 
> > a.inject(Hash.new(0)){|h,v|h[v]+=1;h}.reject{|k,v| v\<2}.keys  
> > =\> [“a”, 7]
