我是新來的Perl和卡住的數組排序問題。排序在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
但它沒有幫助。
請提出一些想法來完成這件事。
我是新來的Perl和卡住的數組排序問題。排序在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
但它沒有幫助。
請提出一些想法來完成這件事。
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
真棒方向和非常感謝。感謝你的時間! – user2705120
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
您是不是要找' @lines =(「S-1.1」,「A-1.4」,「V-1.3」)?爲什麼不通過正則表達式提取排序標準並進行[Schwartzian變換](https://en.wikipedia.org/wiki/Schwartzian_Transform)? – amon
在你的例子中,排序是基於數字倒序的'-'後面的內容?你是這個意思嗎? – marderh
[* Sort :: Naturally *](https://metacpan.org/module/Sort::Naturally)呢? – squiguy