我在代码下面运行以对字符串进行排序而不是获得预期的结果.
码:
use warnings;
use strict;
my @strArray= ("64.0.71","68.0.71","62.0.1","62.0.2","62.0.11");
my @sortedStrArray = sort { $a cmp $b } @strArray;
foreach my $element (@sortedStrArray ) {
print "\n$element";
}
Run Code Online (Sandbox Code Playgroud)
结果:
62.0.1
62.0.11 <--- these two
62.0.2 <---
64.0.71
68.0.71
Run Code Online (Sandbox Code Playgroud)
预期结果:
62.0.1
62.0.2 <---
62.0.11 <---
64.0.71
68.0.71
Run Code Online (Sandbox Code Playgroud)
"1"字符0x31."2"是字符0x32.0x31小于0x32,因此"1"在"2"之前排序.你的期望是不正确的.
要获得您希望获得的结果,您可以使用以下内容:
my @sortedStrArray =
map substr($_, 3),
sort
map pack('CCCa*', split(/\./), $_),
@strArray;
Run Code Online (Sandbox Code Playgroud)
或者更广泛的输入:
use Sort::Key::Natural qw( natsort );
my @sortedStrArray = natsort(@strArray);
Run Code Online (Sandbox Code Playgroud)