Is there an efficient way of doing this. I have an array
a=[1,2,2,3,1,2]
I want to output the frequency of occurrence in an ascending order. Example
[[3,1],[1,2],[2,3]]
Here is my code in ruby.
b=a.group_by{|x| x}
out={}
b.each do |k,v|
out[k]=v.size
end
out.sort_by{|k,v| v}
a = [1,2,2,3,1,2]
a.each_with_object(Hash.new(0)){ |m,h| h[m] += 1 }.sort_by{ |k,v| v }
#=> [[3, 1], [1, 2], [2, 3]]
Something like this:
x = a.inject(Hash.new(0)) { |h, e| h[e] += 1 ; h }.to_a.sort{|a, b| a[1] <=> b[1]}
Are you trying to work out the algorithm or do you just want the job done? In the latter case, don't reinvent the wheel:
require 'facets'
[1, 2, 2, 3, 1, 2].frequency.sort_by(&:last)
# => [[3, 1], [1, 2], [2, 3]]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With