Sort hashes using values

Ruby automatically sorts hashes by keys, which means:

h = {"first"=>2,"second"=>1,"third"=>3}

=> {"third"=>3, "second"=>1, "first"=>2}

How do I sort this by the values? So that I have:
{"second"=>1, "first"=>2, "third"=>3}

Subbu wrote:

Ruby automatically sorts hashes by keys, which means:

h = {"first"=>2,"second"=>1,"third"=>3}

=> {"third"=>3, "second"=>1, "first"=>2}

How do I sort this by the values? So that I have:
{"second"=>1, "first"=>2, "third"=>3}

-------------> class Hash - RDoc Documentation
hsh.sort => array
hsh.sort {| a, b | block } => array

Converts hsh to a nested array of [ key, value ] arrays and sorts it,
using Array#sort.

   h = { "a" => 20, "b" => 30, "c" => 10 }
   h.sort #=> [["a", 20], ["b", 30], ["c", 10]]
   h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]

···

--
Posted via http://www.ruby-forum.com/\.

A hash, by nature, is not really sorted IIRC. If you sort, you need
an Array object as a return value, which means using #sort_by...

h = Hash["first", 2, "second", 1, "third", 3]
h.sort_by {|k, v| v}

It will give you an array of arrays.

Todd

···

On Mon, Mar 10, 2008 at 11:34 AM, Subbu <subramani.athikunte@gmail.com> wrote:

Ruby automatically sorts hashes by keys, which means:

>> h = {"first"=>2,"second"=>1,"third"=>3}
=> {"third"=>3, "second"=>1, "first"=>2}

How do I sort this by the values? So that I have:
{"second"=>1, "first"=>2, "third"=>3}

and with #sort_by

irb(main):001:0> {"first"=>2,"second"=>1,"third"=>3}.sort_by {|k,v| v}
=> [["second", 1], ["first", 2], ["third", 3]]

Kind regards

robert

···

2008/3/10, Rodrigo Bermejo <rodrigo.bermejo@ps.ge.com>:

Subbu wrote:
> Ruby automatically sorts hashes by keys, which means:
>
>>> h = {"first"=>2,"second"=>1,"third"=>3}
> => {"third"=>3, "second"=>1, "first"=>2}
>
> How do I sort this by the values? So that I have:
> {"second"=>1, "first"=>2, "third"=>3}

-------------> http://www.ruby-doc.org/core/classes/Hash.html
hsh.sort => array
hsh.sort {| a, b | block } => array

Converts hsh to a nested array of [ key, value ] arrays and sorts it,
using Array#sort.

   h = { "a" => 20, "b" => 30, "c" => 10 }
   h.sort #=> [["a", 20], ["b", 30], ["c", 10]]
   h.sort {|a,b| a[1]<=>b[1]} #=> [["c", 10], ["a", 20], ["b", 30]]

--
use.inject do |as, often| as.you_can - without end

Thanks so much guys.

···

On Mar 10, 10:48 am, Todd Benson <caduce...@gmail.com> wrote:

On Mon, Mar 10, 2008 at 11:34 AM, Subbu <subramani.athiku...@gmail.com> wrote:
> Ruby automatically sorts hashes by keys, which means:

> >> h = {"first"=>2,"second"=>1,"third"=>3}
> => {"third"=>3, "second"=>1, "first"=>2}

> How do I sort this by the values? So that I have:
> {"second"=>1, "first"=>2, "third"=>3}

A hash, by nature, is not really sorted IIRC. If you sort, you need
an Array object as a return value, which means using #sort_by...

h = Hash["first", 2, "second", 1, "third", 3]
h.sort_by {|k, v| v}

It will give you an array of arrays.

Todd