Schwartzian_transform
这是randal schwartz transofm的用法:
首先,了解您想要什么:
按第一个数字排序,然后是第二个,然后是第三个:
让我们这样做:
use warnings;
use strict;
use Data::Dumper;
my @strArray= ("64.0.71","68.0.71","62.0.1","62.0.2","62.0.11");
my @transformedArray = map{[$_,(split(/\./,$_))]}@strArray;
=pod
here @transformedArray have such structure:
$each_element_of_array: [$element_from_original_array, $firstNumber, $secondNumber, $thirdNumber];
for example:
$transformedArray[0] ==== ["64.0.71", 64, 0, 71];
after that we will sort it
first by first number
then: by second number
then: by third number
=cut
my @sortedArray = map{$_->[0]} # save only your original string.
sort{$a->[3]<=>$b->[3]}
sort{$a->[2]<=>$b->[2]}
sort{$a->[1]<=>$b->[1]}
@transformedArray;
print Dumper(\@sortedArray);