簡體   English   中英

在Perl中排序

[英]Sorting in 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但沒有幫助。

請提出一些建議以完成此操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM