【发布时间】:2019-11-21 14:48:08
【问题描述】:
如果我有一个格式如下的字符串数组:
[1900] ABC 15
如何使用 perl sort 对数组进行排序,使其先按第一个数字排序,然后按第二个数字排序?
perldoc sort 的这个例子似乎是相关的:
my @new = sort {
($b =~ /=(\d+)/)[0] <=> ($a =~ /=(\d+)/)[0]
||
fc($a) cmp fc($b)
} @old;
【问题讨论】:
-
当你说 Perl 时,你应该在上下文中显示一些代码。这个
[1900] ABC 15没有任何意义。 -
我认为您需要定义自己的排序子例程,然后检查要比较的字符串部分。您可以将第二个数字附加到第一个数字以获取一个数字 (190015) 进行比较。
-
@sin
=只是来自示例中的一个模式,引用自文档。请注意,确实需要使用元素(...)[0],否则<=>将比较两个列表(即使每个列表只有一个元素),并且由于它强加了我们想要的标量上下文比较每个元素的数量,1 <=> 1。 -
@zdim - 啊,我记得。您必须使正则表达式响应 wantarray 以获取列表,当然我不认为 需要列表上下文,因此需要索引。感谢您清除它。
-
请记住,正如文档所说,这是非常低效的。