早教吧作业答案频道 -->其他-->
perl按hash值排序并返回名次比如说这样的文件:a0.1b0.3c0.2d0.3e0.4想要排序后得到这样的文件a0.11c0.22b0.33d0.33e0.45也就是说按数字的大小排序,然后还要返回名次,数字大小一样的名次要
题目详情
perl按hash值排序并返回名次
比如说这样的文件:
a 0.1
b 0.3
c 0.2
d 0.3
e 0.4
想要排序后得到这样的文件
a 0.1 1
c 0.2 2
b 0.3 3
d 0.3 3
e 0.4 5
也就是说按数字的大小排序,然后还要返回名次,数字大小一样的名次要保证一样.
其中第一列的字母是唯一的.
比如说这样的文件:
a 0.1
b 0.3
c 0.2
d 0.3
e 0.4
想要排序后得到这样的文件
a 0.1 1
c 0.2 2
b 0.3 3
d 0.3 3
e 0.4 5
也就是说按数字的大小排序,然后还要返回名次,数字大小一样的名次要保证一样.
其中第一列的字母是唯一的.
▼优质解答
答案和解析
#!/bin/env perl
my @data = map {$_->[0]} sort{$a->[1] $b->[1]} map{[ $_, (split)[1] ]} ;
my $line=1;
my $rank=$line;
my $flag=undef;
for (@data)
{
chomp;
if ($flag != (split)[1])
{
$flag = (split)[1];
$rank = $line;
}
print "$_\t$rank\n";
$line++;
}
__DATA__
a 0.1
b 0.3
c 0.2
d 0.3
e 0.4
my @data = map {$_->[0]} sort{$a->[1] $b->[1]} map{[ $_, (split)[1] ]} ;
my $line=1;
my $rank=$line;
my $flag=undef;
for (@data)
{
chomp;
if ($flag != (split)[1])
{
$flag = (split)[1];
$rank = $line;
}
print "$_\t$rank\n";
$line++;
}
__DATA__
a 0.1
b 0.3
c 0.2
d 0.3
e 0.4
看了perl按hash值排序并返回...的网友还看了以下:
有关于犯了错要勇于承认的名人名言一定要有名人的名字!纸是包不住火的那一类,虽然这个不是名言但我一定 2020-04-27 …
这个名字怎么用罗马拼音拼出来?齐妍然这个名字怎么用罗马拼音拼出来呢?Share Yan? 2020-05-14 …
(2012•上饶一模)某中学有A、B、C、D四名同学在高三“一检”中的名次依次为1,2,3,4名, 2020-06-12 …
某中学有A、B、C、D、E五名同学在高三“一检”中的名次依次为1,2,3,4,5名,“二检”中的前 2020-06-12 …
英语翻译现在用的昵称,超贝儿,是我的小名了,自然很有感情,很亲切,在这里,我是需要这样的亲切感的. 2020-06-29 …
成绩依然在100名开外(全年级才135人)这次期中只考了290多分成绩至少500多分成绩依然在10 2020-07-09 …
名人名言加上一句的议论就是一句名人名言然后加上对这句名人名言的一到两句的议论,麻烦尽量多给我写点, 2020-07-24 …
有十五张卡片,其中五张上在会写着4,5张上面写着8,五张上面写着6,你能否从中选出几张,使卡片上的数 2020-11-17 …
求一句名言的翻译人不要过分地陶醉与征服大自然的喜悦之中,人类每一次对大自然的征服,大自然都会报复人类 2020-12-26 …
英语翻译名字中的然字用英语怎么写?名字叫做安然,麻烦把安然这个翻译成英语… 2021-01-20 …