可能重复:
Using Perl, how can I sort an array using the value of a number inside each array element?
我有一个如下所示的数组:
my @arr = qw(r1.1 r10.1 r2.1 r33.1);
如何在Perl中对它们进行排序,以便产生:
$VAR = ['r1.1', 'r2.1', 'r10.1', 'r33.1'];
答案 0 :(得分:3)
您可以使用Sort::Key::Natural:
use Sort::Key::Natural qw(natsort);
my @arr = qw(r1.1 r10.1 r2.1 r33.1);
my @sorted = natsort @arr;
答案 1 :(得分:2)
这是一个可行的排序子程序:
sub mySort {
$a =~ /^r(\d+).(\d+)$/;
my ($a1, $a2) = ($1, $2);
$b =~ /^r(\d+).(\d+)$/;
my ($b1, $b2) = ($1, $2);
return $a2 <=> $b2 if ($a1 == $b1);
return $a1 <=> $b1;
}
要使用它,请执行以下操作:
my @sorted = sort mySort @arr;
答案 2 :(得分:1)
my @sorted =
sort {
my @a = $a =~ /([0-9]+)/g;
my @b = $b =~ /([0-9]+)/g;
return $a[0] <=> $b[0] || $a[1] <=> $b[1];
}
@arr;
可能更快:
my @sorted =
map substr($_, 8),
sort
map pack('NNa*', /([0-9]+)\.([0-9]+)/, $_),
@arr;