On 22/08/12 03:49, Uri Guttman wrote:
> On 08/21/2012 08:29 PM, Eduardo wrote:
>> how would you do with Sort::Maker?
> i don't have time to show an example now but it is much cleaner
> looking. all you need to do is code up how you extract each key from
> the data set and how it gets sorted (number vs string, etc.). it makes
> sorting into a declarative problem instead of a coding problem.
>
> uri

do'nt worry, that's what I'm

Thanks a lot for forcing me to study sorting in perl.

This morning I read sort_paper[*] apparently written by someone expert
with the subject, and also Chapter 2 item 22 Effective perl, to get an
overview.

After that I have a vague idea and got this code:

my @sorted = map  { $_->[0] }
             sort { $a->[1] <=> $b->[1] }
             map  { [ $_, /^(\d+)-(\d+)/ && ($1 * 100 + $2) ] }
             keys %$hash;

Tonight I reread the Sort::Maker manual, now I understand and I was able
to create this code:

my $sorted = make_sorter( name => 'sort_func',
                          orcish => 1,
                          number => '/^(\d+)-(\d+)/ && ($1 * 100 + $2)'
that generate this:

sub {
   
    my ( %or_cache1 ) ;

   
    sort {
    (
      ( $or_cache1{$a} ||=
        do{ my ($val) = map { /^(\d+)-(\d+)/ && ($1 * 100 + $2) } $a ;
$val } )
            <=>
      ( $or_cache1{$b} ||=
        do{ my ($val) = map { /^(\d+)-(\d+)/ && ($1 * 100 + $2) } $b ;
$val } )
    )

    } @_  ;
}


I did not think that I obtained so high performance in a short time, I
just subscribe to the list.

It's a pity Sort::Maker not in Debian

Thanks a lot

* http://www.sysarch.com/Perl/sort_paper.html


Eduardo.

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to