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 回答