目前,我正在使用二维数组,其中包含有关足球进球的信息.第一个数组中的每个项目都是一个数组,其中包含有关目标的不同信息.这个数组中的第二个项目是得分(1-90)因为我想按顺序排列它们,所以我可以确定它们的得分线.我正在使用'分钟'值来对此进行排序:
@allinfogoals = sort { $a->[1] <=> $b->[1] } @allinfogoals;
Run Code Online (Sandbox Code Playgroud)
这很有效,直到我遇到额外时间得分的目标.这些分钟显示为"90 + 2"或"45 + 3".现在,我可以将它们添加到一起,但这可能会使订单不正确.在这种情况下,在半场结束前得分的进球可以存储为在下半场开始后不久得分的进球后得分.
所以,我发现这些90 + x格式的分钟并将它们分成'+'.我将第一个值存储在我经常在数组中存储分钟的位置,但是我在数组末尾添加了另一个值(第12个项目),我将第二个部分(分钟加入额外的时间)放在那里.当它是常规目标时,它是0.
如何修改上面的排序以补偿这一点,并保持正确的顺序?
听起来你想首先对一个键进行排序,如果该键是相同的,那么你想要对第二个键进行排序.
例如,您希望45 + 2在45到46之间排序.
您只需使用以下命令即可:
@ls = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @ls
Run Code Online (Sandbox Code Playgroud)
仅当第一个键相同时,才查询第二个键.
这是一个完整的例子:
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;
Run Code Online (Sandbox Code Playgroud)
输出是:
[[33, 0], [45, 0], [45, 2], [46, 0], [90, 2], [91, 0]]
Run Code Online (Sandbox Code Playgroud)