From: Matthew Harris Date: 2006-06-14T16:38:39+09:00 Subject: Re: impossible to sort a hash by key? On 6/14/06, Oliver Katzer wrote: > Hi everyone! > > is it impossible to sort a hash by key? > > I have a hash like {"plums"=>3, "bananas"=>4, "apples"=>6} > > And what i want is {"apples" => 6, "bananas" => 4, "plums" => 3} > > Hash#sort returns an array. So i've tried this: > > class Hash > def sort_by_key > array = self.sort > # the array is sorted! > array.inject({}) do |hash, value| > hash[value.first] = value.last > hash > end > end > end > > But the result is {"plums"=>3, "bananas"=>4, "apples"=>6}! > > So - is it impossible to sort a hash by key? > > Oliver. > > -- > Posted via http://www.ruby-forum.com/. > > Hashes are unordered, an "ordered hash" is an oxymoron. If you need a hash to be ordered, the easiest way is to use an array. irb(main):001:0> hsh = {:a => 1, :b => 2, :c => 3, :d => 4} => {:d=>4, :b=>2, :c=>3, :a=>1} irb(main):002:0> hsh.sort_by { |k,v| k } NoMethodError: undefined method `<=>' for :d:Symbol from (irb):2:in `sort_by' from (irb):2 from :0 irb(main):003:0> hsh.sort_by { |k,v| k.to_s } => [[:a, 1], [:b, 2], [:c, 3], [:d, 4]] -- Matt