gpt4 book ai didi

Perl 数值排序 : how to ignore leading alpha character

转载 作者:行者123 更新时间:2023-12-02 05:25:54 32 4
gpt4 key购买 nike

我有一个像这样的 1,660 行数组:

...
H00504
H00085
H00181
H00500
H00103
H00007
H00890
H08793
H94316
H00217
...

主角永远不会变。它始终是“H”,然后是五位数。但是当我在 Perl 中做我认为是数字排序的事情时,我得到了奇怪的结果。一些段按顺序排序,但随后启动了一个不同的段。这是排序后的片段:

...
H01578
H01579
H01580
H01581
H01582
H01583
H01584
H00536
H00537
H00538
H01585
H01586
H01587
H01588
H01589
H01590
...

我正在尝试的是:

my @sorted_array = sort {$a <=> $b} @raw_array;

但是显然是行不通的。有人知道为什么吗?

我应该补充一点,虽然这些值都以“H”为前缀,但仍有可能在未来我们最终可能会以其他字母作为前缀的附加数据。这意味着删除 H,排序,然后替换 H,不是解决方案

最佳答案

如果你使用的是use strict;使用警告; 如您所愿,您会收到许多形式的错误

Argument "H01578" isn't numeric in numeric comparison (<=>)

您的元素都不是数字,因此它们都被视为零。这就是 Perl 考虑当前代码排序结果的原因。


如果您想按字母排序然后按数字排序(这与仅按数字排序相同,因为所有字母都相同):

my @sorted_array = sort @raw_array;

这是

的缩写
my @sorted_array = sort { $a cmp $b } @raw_array;

如果您想按数字排序而不考虑前导字母,您可以使用以下代码:

my @sorted_array =
sort { substr($a, 1) <=> substr($b, 1) }
@raw_array;

关于Perl 数值排序 : how to ignore leading alpha character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12851242/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com