1

我有一组字符串:

$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 中实现这一点。谢谢。

4

1 回答 1

8

使用Schwartzian 变换和 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;
于 2013-07-11T18:42:47.840 回答