in reply to sort an array of hashes by value

Why is broccoli not at the end of the list? I know there's no entry for 9, but why is it inserted there?

Because the lookup of 9 in %ranking returns undef, and undef (issues a warning and) acts as 0 in a numerical comparison. Hence broccoli gets sorted as if its ranking was 0.

If you want unranked foods to sort to the end of the list, you could do something like this:

print %{$_} for sort { ( $ranking{$a->{number}} // 1e308 ) <=> ( $ran +king{ $b->{number}} // 1e308 ) } @food;; number 1 name apple number 2 name banana number 5 name orange number 10 name grape number 9 name broccoli

Note: the parens are required.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: sort an array of hashes by value
by micmac (Acolyte) on Jul 14, 2016 at 00:48 UTC
    Ah, I never would have thought of that. Works beautifully, thanks!