在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;