Maximum value of hash

B

Bart Braem

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
 
F

Farrel Lifson

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.values.max

Farrel
 
T

Trans

Bart said:
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.values.max

T.
 
F

Farrel Lifson

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

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

Farrel
 
W

William Crawford

Bart said:
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?
 
B

Bart Braem

Farrel said:
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
 
J

Just Another Victim of the Ambient Morality

Bart Braem said:
Thanks Farrel (and all others) for the fast replies. It didn't occur with
me
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...
 
R

Rick DeNatale

On 9/12/06, Just Another Victim of the Ambient Morality
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/
 
M

Marcelo Alvim

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.
 
B

Bart Braem

Just said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top