如何在Perl中对日期进行排序?

kir*_*ika 7 sorting perl

如何在Perl中对日期进行排序?

my @dates =  ( "02/11/2009" , "20/12/2001" , "21/11/2010" ); 
Run Code Online (Sandbox Code Playgroud)

我的数组中有以上日期.我该如何排序这些日期?

我的日期格式是dd/mm/YYYY.

Eug*_*ash 18

@dates = sort { join('', (split '/', $a)[2,1,0]) cmp join('', (split '/', $b)[2,1,0]) } @dates;
Run Code Online (Sandbox Code Playgroud)

或使用单独的排序子程序:

sub mysort {
    join('', (split '/', $a)[2,1,0]) cmp join('', (split '/', $b)[2,1,0]);
}
@dates = sort mysort @dates;
Run Code Online (Sandbox Code Playgroud)

更新:一种更有效的方法是Schwartzian变换:

@dates = 
    map $_->[0],
    sort { $a->[1] cmp $b->[1] }
    map  [ $_, join('', (split '/', $_)[2,1,0]) ], @dates;
Run Code Online (Sandbox Code Playgroud)

  • 使用Schwartzian变换或其他缓存键排序执行此操作,因此您不必每次都重新计算值. (4认同)