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

From: Nico L. [mailto:[email protected]]

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]

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

nico

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.

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]