• 締切済み

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位が多い人 すなわち、鈴木という値がほしいのですが、どうすればいいのでしょうか?

みんなの回答

回答No.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のハッシュの値で降順にソートした後で最初のデータだけ表示すればよさそうですね。 ご参考になれば。