Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Sorting Dates Issue

by johngg (Canon)
on Aug 18, 2010 at 17:37 UTC ( [id://855865]=note: print w/replies, xml ) Need Help??


in reply to Sorting Dates Issue

Your idea of extracting year, month and day then concatenating them so they sort naturally is fine. You could take it a little further and apply a Guttman Rosler Transform instead of a sort routine. This node has an explanation and this is the paper on the technique. I think split might be an easier way of extracting date elements than a regex.

knoppix@Microknoppix:~$ perl -E ' > @dates = qw{ > 10/02/2004 > 02/01/2004 > 01/02/2004 > 01/06/2004 > 01/02/2005 > 01/12/2004 > 08/18/2010 > }; > say for > map { substr $_, 8 } > sort > map { join q{}, ( split m{/} )[ 2, 0, 1 ], $_ } > @dates;' 01/02/2004 01/06/2004 01/12/2004 02/01/2004 10/02/2004 01/02/2005 08/18/2010 knoppix@Microknoppix:~$

I hope this is of interest.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^2: Sorting Dates Issue
by Anonymous Monk on Aug 18, 2010 at 17:54 UTC
    Yes it works, how could this code do the sorting in reverse, I mean the most recent date on top?
    use strict; my @dates = qw{ 10/02/2004 02/01/2004 01/02/2004 08/18/2010 01/06/2004 01/02/2005 01/12/2004 }; my @sorted= map { substr $_, 8 } sort map { join q{}, ( split m{/} )[ 2, 0, 1 ], $_ }@dates;

    Thanks!

      Once the elements to be sorted have been combined into a single string it is just a lexical sort so you can use a simple anonymous routine to reverse the order.

      knoppix@Microknoppix:~$ perl -E ' > @dates = qw{ > 10/02/2004 > 02/01/2004 > 01/02/2004 > 01/06/2004 > 01/02/2005 > 01/12/2004 > 08/18/2010 > }; > say for > map { substr $_, 8 } > sort { $b cmp $a } > map { join q{}, ( split m{/} )[ 2, 0, 1 ], $_ } > @dates;' 08/18/2010 01/02/2005 10/02/2004 02/01/2004 01/12/2004 01/06/2004 01/02/2004 knoppix@Microknoppix:~$

      Cheers,

      JohnGG

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://855865]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2024-04-24 07:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found