Perl自然排序数字

Sta*_*cky 3 sorting perl

我需要对数字进行排序,但我无法按照我想要的方式工作.

输入示例:

15.12
16.1
15.2
15.1
Run Code Online (Sandbox Code Playgroud)

预期产量:

15.1
15.2
15.12
16.1
Run Code Online (Sandbox Code Playgroud)

我尝试了正常的排序,也Sort::Naturally为此.两者都没有给我预期的输出.

我也知道我可以按照以下方式进行排序,以我想要的方式对其进行排序.

my @sorted =
map sprintf('%vd', $_),
sort
map join('', map chr, split /\./),
@data;
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一些我可以使用的预先存在的模块.

提前致谢.

sid*_*yll 6

如果我理解正确,你想首先按整数值对数字进行排序,然后将小数部分视为整数本身,因此.12大于.2示例中的数字(12> 2).

我认为最自我解释的方法是使用自定义排序,按照你的说法分割后:

@sorted = sort {
    my ($a1, $a2) = split /\./, $a;
    my ($b1, $b2) = split /\./, $b;
    $a1 <=> $b1 or $a2 <=> $b2
} @numbers;
Run Code Online (Sandbox Code Playgroud)