perl - 在 perl 中使用 x.x.x.x 格式对数字进行排序

标签 perl sorting

例如,数字格式为:

1.1.10
1.1.10.1
1.1.10.2
1.1.11
1.1.12
1.1.13
1.1.13.1
1.1.3
1.1.4

我正在寻找的输出是:
1.1.3
1.1.4
1.1.10
1.1.10.1
1.1.10.2
1.1.11
1.1.12
1.1.13
1.1.13.1

最佳答案

use Sort::Key::Natural qw( natsort );
my @sorted = natsort @data;

或(无模块)
my @sorted =
   map $_->[0],
   sort { $a->[1] cmp $b->[1] }
   map [ $_, pack('C*', split /\./) ],
   @data;

或(无模块,更快,但需要一个数组而不是输入列表)
 my @sorted =
   map $data[unpack('N', $_)],
   sort
   map pack('NC*', $_, split /\./, $data[$_]),
   0..$#data;

pack模板,您可以更改CnN . C最多允许 255 个数字。n最多允许 65,535 个数字。 N允许数量高达 40 亿。

关于perl - 在 perl 中使用 x.x.x.x 格式对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11585390/

相关文章:

linux - 在 perl 脚本中混合 vboxmanage 和 bash 命令

java - 使用比较器对列表名称和日期进行排序

javascript - 根据日期属性对 javascript 对象进行排序

linux - 合并头文件和部分尾文件然后合并到标准输出的有效方法

java - 如何在多层中按值对 Map 进行排序

java - 使用 Collections.sort() 时出错

mysql - 在 MySQL 中使用字符串的数字组件对字符串进行数字排序的首选方法是什么?

perl - gsutil cp : concurrent execution leads to local file corruption

c - 从specman执行perl

perl - die 函数与 use 函数一起使用时会产生语法错误