Reputation: 48495
I have the following array:
[["2010-01-10", 2], ["2010-01-09", 5], ["2009-12-11", 3], ["2009-12-12", 12], ["2009-12-13", 0]]
I just want to sort it by the second value in each group and return the highest one, like i want to the output to be 12
with the given input above.
update
I might add that I made this into an array using to_a
, from a hash, so if there is away to do the same with a hash that would be even better.
Upvotes: 11
Views: 11640
Reputation: 246764
If you want the key-value pair with the max value:
hash.max_by {|key, val| val} # => ["2009-12-12", 12]
requires Ruby 1.8.7+
Upvotes: 3
Reputation: 186
Call the sort
method on your hash to sort it.
hash = hash.sort { |a, b| b[1] <=> a[1] }
Then convert your hash to an array and extract the first value.
result = hash.to_a[0][1]
Upvotes: 8
Reputation: 123791
To sort by second value
x=[["2010-01-10", 2], ["2010-01-09", 5], ["2009-12-11", 3], ["2009-12-12", 12], ["2009-12-13", 0]]
x.sort_by{|k|k[1]}
=> [["2009-12-13", 0], ["2010-01-10", 2], ["2009-12-11", 3], ["2010-01-09", 5], ["2009-12-12", 12]]
Upvotes: 31
Reputation: 223003
Use this on your hash:
hash.values.max
If you only need the highest element, there is no need to sort it!
Upvotes: 8