From: "Jesús Gabriel y Galán" Date: 2010-03-23T21:30:51+09:00 Subject: Re: sort elements Another approach: irb(main):001:0> s = "car car ice ice house ice house tree" => "car car ice ice house ice house tree" irb(main):002:0> h = Hash.new(0) => {} irb(main):006:0> s.split.each {|x| h[x] += 1} => ["car", "car", "ice", "ice", "house", "ice", "house", "tree"] irb(main):007:0> h => {"ice"=>3, "house"=>2, "car"=>2, "tree"=>1} irb(main):008:0> h.sort_by {|k,v| -v} => [["ice", 3], ["house", 2], ["car", 2], ["tree", 1]] irb(main):009:0> h.sort_by {|k,v| -v}.each {|k,v| puts "#{v} #{k}"} 3 ice 2 house 2 car 1 tree With the uniq and the count you are traversing the array many times. Jesus.