Maximum value of hash

A very simple question: what’s the best way to get the maximum value of
a
hash? Currently I have something like:

max = 0
hash.each_value do |value|
if (value > max )
max = value
end
end

But it does not feel ruby… Same question for sum, but I guess the
answer
will be similar?

Bart

On 12/09/06, Bart B. [email protected] wrote:

But it does not feel ruby… Same question for sum, but I guess the answer
will be similar?

Bart

hash.values.max

Farrel

Bart B. wrote:

But it does not feel ruby… Same question for sum, but I guess the answer
will be similar?

Bart

hash.values.max

T.

Bart B. wrote:

A very simple question: what’s the best way to get the maximum value of
a
hash? Currently I have something like:

max = 0
hash.each_value do |value|
if (value > max )
max = value
end
end

But it does not feel ruby… Same question for sum, but I guess the
answer
will be similar?

Bart

hash = Hash.new
hash[‘a’]=4
=> 4
hash[‘b’]=10
=> 10
hash[‘c’]=7
=> 7
hash.max
=> [“c”, 7]
hash.values.max
=> 10

That?

On 12/09/06, Bart B. [email protected] wrote:

But it does not feel ruby… Same question for sum, but I guess the answer
will be similar?

Bart

As for sum you can use inject:
has.values.inject{|sum,value| sum + value}

Farrel

Farrel L. wrote:

But it does not feel ruby… Same question for sum, but I guess the
answer will be similar?

Bart

hash.values.max

Thanks Farrel (and all others) for the fast replies. It didn’t occur
with me
that the values array had this method of course…

Bart

“Bart B.” [email protected] wrote in message
news:[email protected]

            max = value

that the values array had this method of course…
Just in case you didn’t realise this, the Array class (and, thus, all
arrays) has the max method. If you wanted the max of two values, you’d
put
those two values in an array and then take the max of that array…

a = 2
b = 3
max = [a, b].max

Since Hash#values returns an _array_ of hash values...

On 9/12/06, Just Another Victim of the Ambient M.

Just in case you didn't realise this, the Array class (and, thus, _all_

arrays) has the max method.

Actually the Enumerable mixin module implements max, so any enumerable
has it, and gives you the maximum element yielded by each

(1…10).max #=> 10
{‘a’ => 1, ‘b’ => 7}.max #=> [“b”, 7]
“abc\ndef”.max #=> “def”


Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/

IPMS/USA Region 12 Coordinator
http://ipmsr12.denhaven2.com/

Visit the Project Mercury Wiki Site
http://www.mercuryspacecraft.com/

Just Another Victim of the Ambient M. wrote:

Just in case you didn’t realise this, the Array class (and, thus, all
arrays) has the max method. If you wanted the max of two values, you’d
put those two values in an array and then take the max of that array…

a = 2
b = 3
max = [a, b].max

Since Hash#values returns an array of hash values…

I did realize that the Array class has the max method. After some
browsing
to the documentation I also understand the inclusion of Enumerable and
its
effects. I must say, my code gets really clean this way.

I’m starting to like ruby a lot. Yesterday I had to prototype an
algorithm
and with Ruby I did that in a quarter of an hour. That’s really fast! My
colleagues were surprised about the code, they knew how to read it
without
knowing ruby!

Impressed a lot,
Bart

“Marcelo A.” [email protected] writes:

As the thread is about hashes, it’s nice to know that the #max method,
when applied to hashes, apparently yields the maximum value for the
keys, not for the values.

Alvim.

{‘a’ => 1, ‘b’ => 10, ‘z’ => 5}.max {|a,b| a[1] <=> b[1]} #=> [“b”, 10]

Steve

Actually the Enumerable mixin module implements max, so any enumerable
has it, and gives you the maximum element yielded by each

(1…10).max #=> 10
{‘a’ => 1, ‘b’ => 7}.max #=> [“b”, 7]
“abc\ndef”.max #=> “def”

This is really sweet, but I think in this context it’s worth noting
that:

{‘a’ => 1, ‘b’ => 10, ‘z’ => 5}.max #=> [“z”, 5]

As the thread is about hashes, it’s nice to know that the #max method,
when applied to hashes, apparently yields the maximum value for the
keys, not for the values.

Alvim.

Oliver S. wrote in post #1010990:

Steve’s is good, but why use max when max_by is cleaner?

@hash.max_by{|x| x[1]}

Or even cleaner:

@hash.max_by {|k,v| v}

Steve’s is good, but why use max when max_by is cleaner?

@hash.max_by{|x| x[1]}