sorting a hash ruby to return a hash code example

Example 1: ruby reorder keys in hash

# First thing to note that #sort/#sort_by will return a new array. Therefore, if we want to return the sorted hash in hash format, we need to call #to_h after #sort.

hash = { a:1, bb:2, ccc:4, dddd:3, eeeee:2}

# sort on key in decending order
puts hash.sort_by {|k, v| -k.length }.to_h
> {:eeeee=>2, :dddd=>3, :ccc=>4, :bb=>2, :a=>1}

# you could do any thing to determine the sort order of the key this way


# a normal sort would work like this (in Ruby 2.1 or higher):
hash.sort.to_h

Example 2: Sorting a Hash by Key or Value

# ==> Sorting a Hash by Key or Value (see lower)
my_hash = {'a'=>'1', 'c'=>'3', 'b'=>'2'}

my_hash.keys.sort.each do |key| 
  puts my_hash[key] 
end
Gives:
1
2
3

# Hashes are unsorted objects because of the way in which they are stored 
#internally. If you want to access a Hash in a sorted manner by key, 
# you need to use an Array as an indexing mechanism as is shown above.

# You can also use the Hash#sort method to get a 
# ==> new sorted Array of pairs:

my_hash.sort
    #=> [["a", "1"], ["b", "2"], ["c", "3"]]

# You can do the same by value, but it’s a little more complicated:

my_hash.keys.sort_by { |key| my_hash[key] }.each do |key|
    puts my_hash[key]
end

# Or, you can use the Hash#sort method for values:

my_hash.sort { |l, r| l[1]<=>r[1] }
    #=> [["a", "1"], ["b", "2"], ["c", "3"]]

# This works by using the Emmuerator#sort_by method that is mixed 
# into the Array of keys. #sort_by looks at the value my_hash[key] returns 
# to determine the sorting order.

Tags:

Ruby Example