如何在Perl中返回排序列表的索引?

myn*_*EFF 0 perl

说,我有一个清单:

@abc = (5,7,6,2,7,1);
Run Code Online (Sandbox Code Playgroud)

我必须获得一个排序列表以及一个排序列表索引.所以输出将是:

@sorted_list = (7,7,6,5,2,1);
@sorted_list_index = (1,4,2,0,3,5);
Run Code Online (Sandbox Code Playgroud)

我也正在寻找一个非常有效的方法解决这个问题,因为我实际上正在处理一个包含2 ^ 16个条目的长列表.

ike*_*ami 12

如果要对索引进行排序,则需要生成它们

0..$#unsorted
Run Code Online (Sandbox Code Playgroud)

然后你就像其他任何东西一样排序

my @sorted_indexes = sort { $unsorted[$b] <=> $unsorted[$a] } 0..$#unsorted;
Run Code Online (Sandbox Code Playgroud)

可以使用切片来抓取排序的值.

my @sorted_values = @unsorted[ @sorted_indexes ];
Run Code Online (Sandbox Code Playgroud)