根据日期对perl中的字符串进行排序

时间:2013-07-11 18:35:32

标签: perl sorting

我有一组字符串:

$str1: 7-10-2013- X1
$str2: 19-04-2010-G2
$str3: 7-10-2013-X2
$str4: 7-12-2013-A

我想根据日期和字母表对字符串进行排序。那么,排序后的上述字符串将是:

$str2: 19-04-2010-G2
$str1: 7-10-2013-X1
$str3: 7-10-2013-X2
$str4: 7-12-2013-A

我这样做的想法是进行正则表达式分组,然后根据每个组进行排序。但我正在寻找更有效的想法来实现perl。 感谢。

1 个答案:

答案 0 :(得分:8)

使用Schwartzian Transform以及YYYYMMDD格式的日期按字典顺序排序:

#!/usr/bin/perl
use warnings;
use strict;

my @strings = qw(7-10-2013-X1 19-04-2010-G2 7-10-2013-X2 7-12-2013-A);

print "$_\n" for map $_->[1],
                 sort { $a->[0] cmp $b->[0] }
                 map {
                     my ($d, $m, $y, $str) = split /-/;
                     [sprintf('%d%02d%02d%s', $y, $m, $d, $str), $_]
                 }
                 @strings;