我有一组字符串:
$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。 感谢。
答案 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;