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

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 に答える