On 12.10.2006 17:24, Jason Burgett wrote:
> I'm basically trying to the opposite of .uniq Let's say I have an array:
> 
> ["a", "a", "a", "b", "c", "d", "d"]
> 
> I would like to boil this down by first tossing the values that only 
> appear once. Which leaves me with:
> 
> ["a", "a", "a", "d", "d"]
> 
> Then I need to somehow determine that "a" appears 3 times and "d" 
> appears 2 times. Any help would be great. Thanks.

Did anyone suggest inject + partition yet?  If not:

irb(main):001:0> a = ["a", "a", "a", "b", "c", "d", "d"]
=> ["a", "a", "a", "b", "c", "d", "d"]
irb(main):002:0> stat = a.inject(Hash.new(0)) do |h, e|
irb(main):003:1*   h[e] += 1
irb(main):004:1>   h
irb(main):005:1> end
=> {"a"=>3, "b"=>1, "c"=>1, "d"=>2}
irb(main):006:0> one, multi = stat.partition {|e,c| c == 1}
=> [[["b", 1], ["c", 1]], [["a", 3], ["d", 2]]]
irb(main):007:0> one
=> [["b", 1], ["c", 1]]
irb(main):008:0> multi
=> [["a", 3], ["d", 2]]
irb(main):009:0> one.map! {|e,c| e}
=> ["b", "c"]

Kind regards

	robert