我有两个需要排序的数组。
例如,我可能有以下内容:
@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
按升序排列。例如,前3 in和2 in@bb
都对应于1 in @aa
,因此我希望能够交换它们,所以@bb = (2, 3, 3, 1, 2)
。
是否有捷径可寻。我曾想过一个新的数组,我多次对每一个中的元素@aa
和@bb
在一起,然后使用,但不能看到如何会帮助的。
如果要对数字进行排序,则应使用<=>
,而不是cmp
。
对我来说,这听起来像您要在aa值相等时要求按bb值对排序进行修改。这很简单:
my @idx = sort {
$aa[$a] <=> $aa[$b] ||
$bb[$a] <=> $bb[$b]
} 0 .. $#aa;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句