perl中的字符串数组排序问题

use*_*779 3 sorting perl

我在代码下面运行以对字符串进行排序而不是获得预期的结果.

码:

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)

ike*_*ami 9

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