2

我是 Perl 的新手,遇到了数组排序问题。

例如,如果我的输入是

@lines =  qw/ S-1.1 A-1.4 V-1.3 /

输出应该按顺序

A-1.4, V-1.3, S-1.1.

-这个想法是根据字符串中的内容进行整理的。我试过sort {$a <=> $b} @lines了,但没有帮助。

请提出一些想法来完成这项工作。

4

2 回答 2

3
use strict;  
use warnings;

my @lines = ("S-1.1", "A-1.4", "V-1.3"); 
@lines = sort { (split /-/, $b)[1] <=> (split /-/, $a)[1] } @lines; 
print join ', ', @lines;

输出

A-1.4, V-1.3, S-1.1
于 2013-08-21T20:40:21.520 回答
1
my @lines = qw(S-1.1 A-1.4 V-1.3);
@lines = sort { substr($a, index($a, '-') + 1) <=>
                substr($b, index($b, '-') + 1) } @lines;
print "@lines\n";  #: S-1.1 V-1.3 A-1.4

如果你想在字符串中有多个点,它会变得有点复杂:

sub pad($) {
  local $_ = $_[0];
  s/^[^-]*?-//;
  s/(\d+)/sprintf("%020d",$1)/ge;  
  $_
}
my @lines = qw(S-1.2.12 B-1.2.9 A-1.4 V-1.3);
@lines = sort { pad($a) cmp pad($b) } @lines;
print "@lines\n";  #: B-1.2.9 S-1.2.12 V-1.3 A-1.4
于 2013-08-21T20:39:14.193 回答