Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm perl排名数字与平局/平局_Algorithm_Perl_Sorting_Hash_Integer - Fatal编程技术网

Algorithm perl排名数字与平局/平局

Algorithm perl排名数字与平局/平局,algorithm,perl,sorting,hash,integer,Algorithm,Perl,Sorting,Hash,Integer,我有一个整数数组,但这不是1,2,3,4,5等的典型排名。如果整数有相同的值,那么排名也是相同的值。例1,2,2,4,5。然而,我们需要相应地增加排名。所以跳过等级3,因为有两个2 1,2,3,3,5而不是1,2,3,3,4 整数数组可以是几千个,因此一个有效的算法将是理想的。最好是用perl编写一个可以输入的函数 整数数组=1000200030003500 将得到结果=1,2,3,3,5 另一个例子 整数=10020020030040050010002000 秩=1,2,2,5,6,7,7,9

我有一个整数数组,但这不是1,2,3,4,5等的典型排名。如果整数有相同的值,那么排名也是相同的值。例1,2,2,4,5。然而,我们需要相应地增加排名。所以跳过等级3,因为有两个2

1,2,3,3,5而不是1,2,3,3,4

整数数组可以是几千个,因此一个有效的算法将是理想的。最好是用perl编写一个可以输入的函数

整数数组=1000200030003500

将得到结果=1,2,3,3,5

另一个例子

整数=10020020030040050010002000

秩=1,2,2,5,6,7,7,9,10

use strict;

my @test = (100,200,200,200,300,400,500,500,1000,2000);
my @sorted = sort {$a <=> $b} @test;
my $rank = 1;
my @ranks;
foreach my $count (0..$#sorted) {
    $rank = $count + 1 if ($count > 0 && $sorted[$count] != $sorted[$count - 1]);
    push @ranks, $rank;
}

print join ",", @ranks;
使用严格;
my@test=(10020020030040050010002000);
my@sorted=sort{$a$b}@test;
我的$rank=1;
我的队伍;
foreach my$count(0..$#排序){
$rank=$count+1如果($count>0&$sorted[$count]!=$sorted[$count-1]);
推动@ranks,$rank;
}
打印join“,”,@ranks;

您可以使用哈希来记住
@integers
数组中重复值的位置

use strict;
use warnings;

my @integers = sort {$a <=> $b} (100,200,200,200,300,400,500,500,1000,2000);

my %seen;
my @rank = map { $seen{$integers[$_]} //= $_+1 } 0 .. $#integers;

# same as
# my @rank = map { $seen{$integers[$_]} //= $_+1; $seen{$integers[$_]} } 0 .. $#integers;

use Data::Dumper; print Dumper \@rank;

问题是什么?
$VAR1 = [
      1,
      2,
      2,
      2,
      5,
      6,
      7,
      7,
      9,
      10
    ];