in reply to largest number inside array/hash

for an array, i'd use
my $max; grep($max=($_>$max)?$_:$max,@arr);
For searching among the keys of a hash, just replace @arr with keys %hash.

Sorting a whole array just to find the largest element is waay overkill - you do too many comparisons, and you have to move the elements around. It doesn't really matter for arrays that have ten or so elements, but as soon as you get to thousands, you will start noticing the difference.

Replies are listed 'Best First'.
Re: Re: largest number inside array/hash
by Anonymous Monk on Apr 07, 2004 at 04:39 UTC
    This does not contain any data, it doesn't store anything in $max and I know the hash works because I'm using it elsewhere.
    my $max; grep($max=($_>$max)?$_:$max,keys %files); print $max;
      I really, really doubt that.

      Here is the code I tested with, and it's output:

      #!/usr/bin/perl my %files=%{{1=>"a", 2=>"b", 34=>"c", 5=>"d", 6=>"e", 7=>"f", 8=>"g", +9=>"h"}}; my $max; print join(" ",keys %files),"\n"; grep($max=($_>$max)?$_:$max,keys %files); print "<$max>\n";
      Output:
      perl /tmp/foo 6 8 1 34 7 9 2 5 <34>
      I don't know what you did to mess up, but it does so contain data, and stores the max.

      My guess is that if you try it with your files, you'll find it either works, or your hash doesn't look the way you expect. (Hint: try to output it with Data::Dumper