Re: efficient max() function from sort
- From: rob.dixon@xxxxxxx (Rob Dixon)
- Date: Wed, 28 May 2008 22:07:15 +0100
Ramprasad A Padmanabhan wrote:
I use sort to give the max of an array something like this
-----
my @z = qw(12 24 67 89 77 91 44 5 10);
my $max = ((reverse sort{$a <=> $b} (@z))[0]);
print "MAX = $max\n";
-----------
but when I am interested only in a single max value, I need not sort the
entire array
Eugh. Where did you get this from? Hit them hard; with spoons.
OK, let's look at what you've written and try to make it visible.
my $max = ((reverse sort{$a <=> $b} (@z))[0]);
The parentheses around @z are superfluous are superfluous, so the inner call is
sort {$a <=> $b} @z
Now that's cool - we're sorting an array numerically. Next?
reverse sort {$a <=> $b} @z
Ouch. So we sort the contents of @z numerically into one list and then reverse
that list into a second. We could forget that reverse and just write
sort {$b <=> $a} @z
but we didn't do that. Never mind. Next?
Oh. We take just the the first element of the reversed sorted list with
(reverse sort {$a <=> $b} @z)[0]
So that's the maximum value. Fine. Now?
( (reverse sort {$a <=> $b} @z)[0] )
Someone thought we needed a list, so put some parentheses round that value.
And finally
my $max = ( (reverse sort {$a <=> $b} @z)[0] );
Oh. So that one-element list is being evaluated in scalar context after all.
Here are my thoughts.
- It's ugly
- It does mountains of unnecessary work
- It doesn't look like it works
- Few people can explain why it works
What you meant was either
$max = (sort {$a <=> $b} @z)[-1];
or
use List::Util qw/max/;
$max = max @z;
Big, hard spoons please.
Rob
Is there a more efficient alternative to this
PS: Posts via nntp to nntp.perl.org appear after a long time
Is there a more preferred way of posting here
.
- Follow-Ups:
- Re: efficient max() function from sort
- From: Chas. Owens
- Re: efficient max() function from sort
- References:
- efficient max() function from sort
- From: Ramprasad A Padmanabhan
- efficient max() function from sort
- Prev by Date: error with repeated matching
- Next by Date: Re: how to plot graphs
- Previous by thread: Re: efficient max() function from sort
- Next by thread: Re: efficient max() function from sort
- Index(es):
Relevant Pages
|
|