3

キーと値のペアが次のようなハッシュがあるとします。

Name  Scores
Bob 67 89 77 89
Kim 99 98 95 90
Dan 67 90 73 88
   . . .goes on

キーは名前で、値はテストのスコアです。これで、値は配列を参照します。

ハッシュの並べ替え機能があることは理解していますが、各生徒の中央値を見つけたいとします。

最終出力:

Name Median 
Bob 83
( . . .and so on)

中央値を見つけるには、まずスコアを最小から最大の順に並べる必要があります。
各生徒のテスト スコアを並べ替えることができるハッシュの並べ替え機能はありますか?

助けてくれてありがとう。

4

2 に答える 2

3

ビルトインsortがソートできるのはスカラーのリストだけです。ハッシュを並べ替えることはできません。実際、ハッシュをソートすることは不可能です。代わりに、ハッシュのキーを並べ替えます。配列のインデックスを簡単に並べ替えることもできますが、このような間接参照はここでは完全に不要です。

番号のリストがあり、外部情報を必要とせずにその番号のリストを並べ替えたいとします。

my @sorted_scores = sort { $a <=> $b } @scores;

つまり

my @sorted_scores = sort { $a <=> $b } @{ $scores{'Bob'} };

中央値は

my $mid_idx = int(@sorted_scores / 2);
my $median = @sorted_scores % 2
   ? $sorted_scores[$mid_idx]
   : ( $sorted_scores[$mid_idx-1] + $sorted_scores[$mid_idx-0] ) / 2;
于 2013-03-18T23:35:12.557 に答える
0

このモジュールを試してみてください:

統計::基本::中央値

于 2013-03-18T23:35:01.077 に答える