将一个数组与另一个数组进行排序,然后在该数组中排序

时间:2018-12-26 06:54:16

标签: perl sorting

我有两个需要排序的数组。

例如,我可能有以下内容:

@aa = (1, 4, 5, 1, 2); @bb = (3, 1, 2, 2, 3);

以下脚本对@aa中的元素进行排序,然后重新排列@bb,如下所示:

my @idx = sort { $aa[$a] cmp $aa[$b] } 0 .. $#aa;

@aa = @aa[@idx];

@bb = @bb[@idx];

这将@bb保留为(3, 2, 3, 1, 2)

但是,我现在想重新排列@bb中的元素,以便与@aa中的相同值相对应的那些元素按升序排列。例如,@bb中的前3个和2个都对应于@aa中的1个,因此我希望能够交换它们,所以@bb = (2, 3, 3, 1, 2)

有没有简单的方法可以做到这一点。我曾考虑过一个新数组,其中将@aa@bb中的每对元素都在一起,然后使用它,但是看不到有什么用。

1 个答案:

答案 0 :(得分:1)

如果要对数字进行排序,则应使用<=>,而不是cmp

在我看来,您要求在aa值相等时要求您修改排序以按bb值进行排序。这很简单:

my @idx = sort {
    $aa[$a] <=> $aa[$b] ||
    $bb[$a] <=> $bb[$b]
} 0 .. $#aa;