perl - 在 Perl 中根据一项的值对二维数组进行排序,但有异常(exception)

标签 perl sorting

目前,我正在处理一个包含足球进球信息的二维数组。第一个数组中的每个项目都是一个包含有关目标的不同信息的数组。该数组中的第二项是得分分钟 (1-90),因为我希望它们按顺序排列,以便我可以确定他们的得分线。我使用“分钟”值进行排序:

@allinfogoals = sort { $a->[1] <=> $b->[1] } @allinfogoals;

这非常有效,直到我遇到在加时赛中进球的情况。这些分钟显示为“90+2”或“45+3”。现在,我可以将它们添加在一起,但这可能会使顺序不正确。在这种情况下,半场结束前进球可以存储为下半场开始后不久进球后进球。

所以,我找到了具有 90+x 格式的分钟,并在“+”处将它们分开。我将第一个值存储在数组中定期存储分钟的位置,但我在数组末尾添加了另一个值(第 12 项),并将第二部分(加时赛分钟数)放在那里。如果是常规目标,则为 0。

如何修改上面的排序以补偿这一点并使其保持正确的顺序?

最佳答案

听起来您想首先对一个键进行排序,如果该键相同,那么您想对第二个键进行排序。

例如您希望 45+2 在 45 和 46 之间排序。

您只需使用以下命令即可做到这一点:

@ls = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @ls

只有当第一个 key 相同时,才会引用第二个 key 。

这是一个完整的示例:

my @allinfogoals=(
                  [ 46, 0 ],
                  [ 45, 2 ],
                  [ 45, 0 ],
                  [ 33, 0 ],
                  [ 91, 0 ],
                  [ 90, 2 ],
                 );

@allinfogoals=sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @allinfogoals;

use Data::Dump; dd \@allinfogoals;

输出是:

[[33, 0], [45, 0], [45, 2], [46, 0], [90, 2], [91, 0]]

关于perl - 在 Perl 中根据一项的值对二维数组进行排序,但有异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14035544/

相关文章:

Java 按字母顺序将两个文本文件排序为一个文本文件

java - 对 2 个 arraylist 进行排序,每个 arraylist 代表 x 和 y 坐标

java - 插入排序列表时出现 IndexOutOfBounds 错误

perl - 在 Perl 中使用不同的出站 IP

perl - 如何在perl脚本中等待按键?

perl - substr 在非常长的 UTF-8 字符串上的性能问题

javascript - 动态生成 div 时 div 排序不起作用

perl - perl中的函数原型(prototype)

windows - Windows上Perl如何处理程序异常终止

php - 在深度嵌套数组中查找特定键的最低值