Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中根据日期对字符串进行排序_Perl_Sorting - Fatal编程技术网

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

在perl中根据日期对字符串进行排序,perl,sorting,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 我这样做的想法是对正则表达式进行分组,然后根据每个组进行排序。但是我正在寻找更有效

我有一组字符串:

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

使用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;
使用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;