目前,我正在处理一个包含足球进球信息的二维数组。第一个数组中的每个项目都是一个包含有关目标的不同信息的数组。该数组中的第二项是得分分钟 (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/