in reply to Re: Sort the file names a list
in thread Sort the file names a list
A better way (that someone named something fancy which I cannot remember):
Memoizing is caching the result of a function based on its inputs. You're memoizing split.
Less of a tradeoff:
my @sorted = map substr($_, 19), sort map substr($_, -(19+20), 19) . $_, @LogAnalyser::LogFileList;
For the data posted in the OP:
Rate memoized st naive grt memoized 12517/s -- -30% -64% -66% st 17883/s 43% -- -48% -52% naive 34555/s 176% 93% -- -6% grt 36872/s 195% 106% 7% --
use strict; use warnings; use Benchmark qw( cmpthese ); my %cache; sub memoized { my $left = ( $cache{$a} ||= substr($a, -(19+20), 19) ); my $right = ( $cache{$b} ||= substr($b, -(19+20), 19) ); return $left cmp $right; } @::LogFileList if 0; @::LogFileList = qw( /devLog/devid234/term_logs/devid234.2009-08-27-23-55-11.terminal.log.t +ar.gz /devLog/devid234/term_logs/devid234.2009-08-27-15-05-06.terminal.log.t +ar.gz /devLog/devid234/term_logs/devid234.2009-08-27-01-45-03.terminal.log.t +ar.gz /devLog/devid234/term_logs/devid234.2009-08-28-00-00-01.terminal.log.t +ar.gz /devLog/devid234/term_logs/devid234.2009-08-28-18-25-04.terminal.log.t +ar.gz /devLog/devid168/term_logs/devid168.2009-08-28-01-35-02.terminal.log.t +ar.gz /devLog/devid168/term_logs/devid168.2009-08-27-04-02-01.terminal.log.t +ar.gz /devLog/devid168/term_logs/devid168.2009-08-28-20-25-01.terminal.log.t +ar.gz /devLog/devid168/term_logs/devid168.2009-08-27-17-55-01.terminal.log.t +ar.gz /devLog/devid918/term_logs/devid918.2009-08-27-21-15-01.terminal.log.t +ar.gz /devLog/devid918/term_logs/devid918.2009-08-27-13-25-01.terminal.log.t +ar.gz /devLog/devid918/term_logs/devid918.2009-08-27-00-00-01.terminal.log.t +ar.gz /devLog/devid918/term_logs/devid918.2009-08-28-00-00-02.terminal.log.t +ar.gz /devLog/devid918/term_logs/devid918.2009-08-28-09-45-01.terminal.log.t +ar.gz /devLog/devid918/term_logs/devid918.2009-08-28-19-25-01.terminal.log.t +ar.gz /devLog/devid167/term_logs/devid167.2009-08-28-02-45-01.terminal.log.t +ar.gz /devLog/devid167/term_logs/devid167.2009-08-27-01-45-02.terminal.log.t +ar.gz /devLog/devid167/term_logs/devid167.2009-08-27-10-55-01.terminal.log.t +ar.gz ); cmpthese(-3, { naive => ' use strict; use warnings; my @sorted = sort { substr($a, -(19+20), 19) cmp substr($b, -(19+20), 19) } @::LogFileList; ', memoized => ' use strict; use warnings; my @sorted = sort memoized @::LogFileList; ', st => ' use strict; use warnings; my @sorted = map $_->[0], sort { $a->[1] cmp $b->[1] } map [ $_, substr($_, -(19+20), 19) ], @::LogFileList; ', grt => ' use strict; use warnings; my @sorted = map substr($_, 19), sort map substr($_, -(19+20), 19) . $_, @::LogFileList; ', });
Update: Added ST.
Update: Fixed bug in substr indexes.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Sort the file names a list
by bv (Friar) on Aug 31, 2009 at 16:42 UTC | |
by ikegami (Patriarch) on Aug 31, 2009 at 16:50 UTC | |
by bv (Friar) on Aug 31, 2009 at 17:11 UTC | |
|
Re^3: Sort the file names a list
by salva (Canon) on Sep 01, 2009 at 08:41 UTC | |
by ikegami (Patriarch) on Sep 01, 2009 at 13:58 UTC |