電子書籍の厳選無料作品が豊富!

ある、1から5までのスロット(またはセル)に1から200までの数字がランダムに出てくる(登録される)とします。その出てきた、数字が同一のものであれば数を数えたいのですが、どなたか教えていただけないでしょうか?
たとえば
1 に 123
2 に 45
3 に 3
4 に 62
5 に 45 とあったとします。 

そうすれば、2と5のスロット(またはセル)に45が 2個あるので 表示を45が2 123が1、3が1、62が1のように表示させたいのです。 
123, 1
45, 2
3, 1
62, 1


どうもいいサイトもなくうまくできません。 どうすればできますでしょうか? よろしくお願いします。

A 回答 (2件)

案a)sortして、値の切り替わりを見ながら数えてゆく(unix系でよくやるsort|uniq -cの手法)。


案b)連想配列を利用して、それぞれの個数を数える。

――とか。
Perl FAQの、行の出現頻度を数えるサンプルが参考になりますよ。

http://search.cpan.org/~flora/perl-5.14.2/pod/pe …

参考URL:http://ideone.com/akMlh
    • good
    • 0
この回答へのお礼

どうもありがとうございました。 解決できました。

お礼日時:2012/09/20 03:22

普通、こういうことをする場合は連想配列を使って、数値が見つかるたびに連想配列のその要素を+1ですね。


セル・スロットというのが何を言いたいのかわかりませんが、Excelなどからデータを呼んでそういうことをする場合は、そういうライブラリーを使って各セルを読み出します。
その後に行う操作は元のフォーマットがExcelであってもなんであっても同じです。
Excelを読むライブラリーは CPANで Excelと打つなどして探してみてください。http://search.cpan.org/
それで、見つかったライブラリーの名前で検索したら誰かが使い方を解説しているかもしれません。

ここでは、標準入力からデータが来たとしてやって、数を数えた後に標準出力に出力します。
my %numbers;
while (<STDIN>) {
$numbers{$_} = $numbers{$_} + 1;
}
while (($number, $counter) = each %numbers){
print "$number,$counter";
}
    • good
    • 0
この回答へのお礼

どうもありがとうございました。 解決できました。

お礼日時:2012/09/20 03:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!