排序和数组维护索引值

时间:2014-11-04 08:00:44

标签: perl

  1. 我在数组中存储了一些值,如下所示$ score [$ userIndex] =:
  2. 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

2 个答案:

答案 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