【发布时间】:2012-07-21 04:53:50
【问题描述】:
比如说数字的格式:
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
【问题讨论】:
-
不是 6917314 的副本。iDev 的字符串不完全有 4 个部分,而且他没有说它们被限制为 255 个部分。
-
快速破解:
sort { eval $a cmp eval $b } @numbers -
@Cupidvogel,
1.1.1.10与v1.1.1.10相同,字符串化为chr(1).chr(1).chr(1).chr(10)。换句话说,eval "1.1.1.10"是一种昂贵且冒险的方式来做pack "W*", split /\./, "1.1.1.10"。是的,您可以将我的解决方案中的包模板中的“C”更改为“W”。在 32 位 Perls 上最多可以处理 40 亿个数字,在 64 位机器上最多可以处理 2**64-1。 -
@Cupidvogel stackoverflow.com/a/7142844/725418 在 cmets 中,tchrist 详细阐述了这个特殊的“技巧”。基本上它就像 ikegami 所说的那样,它将准数字字符串转换为适当的字符串,之后我们可以“安全地”将它与
cmp运算符一起使用。我将其命名为 quick hack,因为它可能不是解决这个特定问题的好方法。