LPM: The times they are a-changin' (or: integer hash keys)

Joe Hourcle oneiros at dcr.net
Thu Aug 23 10:51:03 CDT 2001



On Thu, 23 Aug 2001, Joe Hourcle wrote:

> print join(' ', sort                       @array), "\n";
> print join(' ', sort { $a cmp $b }         @array), "\n";
> print join(' ', sort { $a <=> $b }         @array), "\n";
> print join(' ', sort { ($a+0) <=> ($b+0) } @array), "\n";


A few other notes about this syntax...

it can also come in handy for other abnormal sorting

eg:

#####

my %HASH = (
	one      => { sort => 1  },
	two      => { sort => 2  },
        fourteen => { sort => 14 },
	six      => { sort => 6  },
	neg_two  => { sort => -2 }
	);

print join (' ', sort { $HASH{$a}{sort} <=> $HASH{$b}{sort} }
		keys %HASH), "\n";

#####

or, for reporting purposes:

#####

our %PEOPLE = (
	Bob	=> { gender => 'M', age => 42 },
	Dave	=> { gender => 'M', age => 30 },
	Debbie	=> { gender => 'F', age => 25 },
	Sue	=> { gender => 'F', age => 36 },
	Al	=> { gender => 'M', age => 35 }
	);

sub decend_by_age { $PEOPLE{$b}{age} <=> $PEOPLE{$a}{age}; }


print "Age Sorted Decending\n";
foreach my $person (sort decend_by_age keys %PEOPLE) {
	print "$person\t$PEOPLE{$person}{age}\t$PEOPLE{$person}{gender}\n";
}

#####



-Joe




More information about the Lexington-pm mailing list