更流行的方式来排序具有前导浮点数的字符串?

时间:2016-07-18 00:51:51

标签: perl sorting

我有一个字符串数组。每个字符串都有一个由管道字符分隔的多个字段。我想通过每个字符串中的第一个字段对字符串进行反向数字排序。我已经编写了一些工作正常的perl代码,我想知道是否有更好的方式来编写它。

sub by_firstField {
    my @tmpA = split ( /\|/, $a ) ;
    my @tmpB = split ( /\|/, $b ) ;
    if ($tmpA[0]> $tmpB[0]) { -1 } elsif ($tmpA[0] < $tmpB[0]) { 1 } else { 0 }
}

push @unsorted, ( "8.02|a|b|c", "47.6|d|e|f", "108.1|g|h|i", "411.5|j|k|l", "8.1|m|n|o" ) ;

@sorted = sort by_firstField @unsorted ;

for ( my $i = 0 ; $i <= $#sorted; $i++ ) {
    print $sorted[$i] . "\n" ;
}

而且,这是输出:

411.5|j|k|l
108.1|g|h|i
47.6|d|e|f
8.1|m|n|o
8.02|a|b|c

1 个答案:

答案 0 :(得分:3)

sort {
   my @fields_a = split /\|/, $a;
   my @fields_b = split /\|/, $b;
   $fields_b[0] <=> $fields_a[0]
}

sort { ( $b =~ /([^|]*)/ )[0] <=> ( $a =~ /([^|]*)/ )[0] }

map $_->[0],
sort { $b->[1] <=> $a->[1] }
map [ $_, split /\|/ ],