根据第二个数组的元素对数组进行排序

Abd*_*del 6 arrays sorting perl data-structures perl-data-structures

假设我有两个看起来像这样的数组:

('1', '6', '8', '4', '5')
('a', 'c', 'd', 'f', 'w')
Run Code Online (Sandbox Code Playgroud)

我想对第一个数组进行排序,第二个数组中元素的顺序应该与第一个数组的顺序相同,所以两者的顺序如下:

('1', '4', '5', '6', '8')
('a', 'f', 'w', 'c', 'd')
Run Code Online (Sandbox Code Playgroud)

在Perl中如何做到这一点的任何想法?

Bor*_*din 11

您需要将索引排序到数组中.像这样

use strict;
use warnings;

my @aa = qw/ 1 6 8 4 5 /;
my @bb = qw/ a c d f w /;

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

@aa = @aa[@idx];
@bb = @bb[@idx];

print "@aa\n";
print "@bb\n";
Run Code Online (Sandbox Code Playgroud)

产量

1 4 5 6 8
a f w c d
Run Code Online (Sandbox Code Playgroud)