NAME
Sort::Key - Perl extension for sorting objects by some key
SYNOPSIS
use Sort::Key qw(keysort nkeysort ikeysort);
@by_name = keysort { "$_->{surname} $_->{name}" } @people;
@by_age = nkeysort { $_->{age} } @people;
@by_sons = ikeysort { $_->{sons} } @people;
DESCRIPTION
Sort::Key provides a set of functions to sort object arrays by some (calculated) key value.
It is faster and uses less memory than other alternatives implemented around perl sort function (ST, GRM, etc.)
EXPORT
None by default.
Functions available from this module are:
- keysort { CALC_KEY } @array
-
returns the elements on
@array
sorted by the key calculated applying{ CALC_KEY }
to them.Inside
{ CALC_KEY }
, the object is available as$_
.For example:
@a=({name=>john, surname=>smith}, {name=>paul, surname=>belvedere}); @by_name=keysort {$_->{name}} @a;
This function honours the
use locale
pragma. - nkeysort { CALC_KEY } @array
-
similar to keysort but compares the keys numerically instead of as strings.
This function honours the
use integer
pragma, i.e.:use integer; my @s=(2.4, 2.0, 1.6, 1.2, 0.8); my @ns = nkeysort { $_ } @s; print "@ns\n"
prints
0.8 1.6 1.2 2.4 2
- rnkeysort { CALC_KEY } @array
-
works as nkeysort, comparing keys in reverse (or descending) numerical order.
- ikeysort { CALC_KEY } @array
-
works as keysort but compares the keys as integers.
- rikeysort { CALC_KEY } @array
-
works as ikeysort, but in reverser (descending order).
- keysort_inplace { CALC_KEY } @array
- nkeysort_inplace { CALC_KEY } @array
- ikeysort_inplace { CALC_KEY } @array
- rkeysort_inplace { CALC_KEY } @array
- rnkeysort_inplace { CALC_KEY } @array
- rikeysort_inplace { CALC_KEY } @array
-
work as the corresponding keysort functions but sorting the array inplace.
SEE ALSO
perl sort function, integer, locale.
And alternative to this module is Sort::Maker.
AUTHOR
Salvador Fandiño, <sfandino@yahoo.com>
COPYRIGHT AND LICENSE
Copyright (C) 2005 by Salvador Fandiño
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.4 or, at your option, any later version of Perl 5 you may have available.