こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Perl ランク付け

名前,順位,点数...etc
とテキストファイルにあるなかで、

山本,2,74
鈴木,1,98
山田,3,54
鈴木,1,99
山田,1,100

この場合、1位の数が誰が多いのかを調べたいのですが、
まず

for my $D_1(@DATA){
my @temp = split/,/, $D_1;
if($temp[1] =~ /1$/){
push(@D_1,$D_1);
}
}

print @D_1;

これで、
結果↓
鈴木,1,98
鈴木,1,99
山田,1,100

このように抽出させたのですが、
ここから、1位が多い人
すなわち、鈴木という値がほしいのですが、どうすればいいのでしょうか?

投稿日時 - 2018-01-15 13:14:03

QNo.9418635

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

中間データを作らず、いきなり「1位を取った回数」をカウントしておけばいいかなと思います。

文字コード関連の処理等は別途付け足していただくとして、キモの部分だけ書くと下記のような感じで「1位を取った回数」が表示できます。
(%data は「名前」と「1位の回数」紐づけたハッシュです)

while(<>) {
chomp;
my @line = split /,/;
$data{$line[0]}++ if($line[1] == 1);
}
foreach $key (keys %data ) {
print $key."\t".$data{$key}."\n";
}

さらにハッシュの値でソートすると、1位を取った回数順に出力することも可能です。
1位の人だけ表示したいなら、%dataのハッシュの値で降順にソートした後で最初のデータだけ表示すればよさそうですね。

ご参考になれば。

投稿日時 - 2018-01-16 16:49:45

あなたにオススメの質問