Score [100, 400, 900]
userIndex (1 , 2 , 3 )
我需要在保持索引的同时根据得分升序数字排序,因为它们具有重要性,结果应该类似于:
Score [100, 400, 900]
userIndex (2 , 1 , 3 )
2。排序完成后如何访问元素所在的先前索引(排序完成后我不再需要得分只是索引)?
在排序数组中,我需要的是例如:$sorted[0] = 2, $sorted[1] = 1, $sorted[3] = 3
答案 0 :(得分:0)
我在广泛的谷歌搜索后找到了这种方法
while ($hashIndex < $#Score) {
$matchHash{$hashIndex} = $Score[$hashIndex];
$hashIndex++;
}
foreach my $score (sort { $matchHash{$a} <=> $matchHash{$b} } keys %matchHash) {
#DS
# printf "%-8s %s\n", $score, $matchHash{$score};
push (@sorted, $score);
}
答案 1 :(得分:0)
执行此操作的方法是对数组索引列表进行排序,而不是对数据本身进行排序。然后,您可以使用相同的排序索引重新排序相应的用户列表。
代码看起来像这样
use strict;
use warnings;
my @score = (400, 100, 900);
my @users = (1, 2, 3);
my @sorted_indices = sort { $score[$a] <=> $score[$b] } 0 .. $#score;
my @sorted_users = @users[@sorted_indices];
print "@sorted_users\n";
<强>输出强>
2 1 3
<强>更新强>
查看您自己的代码,看起来您可能只需要排序的数组索引(即问题中的userIndex
列表应该是(0, 1, 2)
)。如果是这种情况,则填写@sorted_indices
时排序已完成。
print "@sorted_indices\n";
输出
1 0 2