Sorting and undefined values
Uri Guttman
uri at stemsystems.com
Thu Dec 14 19:46:38 GMT 2006
>>>>> "AA" == Andy Armstrong <andy at hexten.net> writes:
AA> On 14 Dec 2006, at 18:09, Earle Martin wrote:
>> Read about it many times, never quite understood it; still don't feel
>> the need to. Way too idiomatic for my tastes. Thanks, though.
AA> It's conceptually simple: if you're sorting a bunch of items and the
AA> value that you're comparing to determine the ordering is expensive to
AA> compute you precompute those values and stash them along with the
AA> things being sorted - thereby reducing the number of expensive
AA> operations by a factor of approx log N.
for more on this read:
http://sysarch.com/Perl/sort_paper.html
and check out Sort::Maker which can build an ST or GRT sorter for you. i
never did understand the actual sorting order desired by the OP. the
code example was broken as was pointed out. is this a single level sort
(use x OR y depending on what is defined) or sort by x first and then
sort the ties by y?
what is great about Sort::Maker is that you only need to define the key
extraction one time (not duplicating it with $a and $b) and it works on
$_ which is set to the element to be sorted. so assuming a simple use x
if defined or else y (not even checking for undef in y) it would look
something like this (untested and pseudoish):
use Sort::Maker ;
my $sorter = make_sorter(
'ST',
number => sub { defined $_->{x} ? $_->{x} : $_->{y} },
) ;
my @sorted = $sorter->( @unsorted ) ;
if you use blead perl you could reduce that to $_->{x} // $_->{y}
:)
uri
--
Uri Guttman ------ uri at stemsystems.com -------- http://www.stemsystems.com
--Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
More information about the london.pm
mailing list