【问题标题】:Find average of hash values Perl查找哈希值的平均值 Perl
【发布时间】:2020-03-08 22:02:00
【问题描述】:

我希望返回以下 (grades.txt) 的哈希值(每个键)的平均值

Melotti, Suzanne: 100 100 95 95 92 87
Wayne, Bruce: 85 85 85 75 75 75
Stark, Tony: 92 92 75 79 91 87
Odinson, Thor: 23 12 10 42 50 64
Kane, Kathy: 100 100 100 100 95 95
Rogers, Steven: 92 91 91 90 87 84
Murdock, Matthew: 100 100 100 99 99 98
VonDoom, Victor: 75 75 72 73 74 80
Queen, Olvider: 92 83 74 65 100 66
Hall, Carter: 23 12 10 42 50 64
Xavier, Charles: 100 100 95 95 92 87

到目前为止,我的子程序如下所示:

$grade_file = "grades.txt";
open FILE, "<", $grade_file;

sub avg {
    while (<$FILE>){
        foreach $line ($grade_file){
            # some code
            return $total

        }
    }
}

【问题讨论】:

  • 您想要每个键的平均值,还是全部?
  • 抱歉,每个键的平均值

标签: perl hash perl-hash


【解决方案1】:

使用List::Util 中的sum。要获取元素的数量,只需在标量上下文中使用数组即可。

#!/usr/bin/perl
use strict;
use warnings;
use feature qw{ say };

use List::Util qw{ sum };    

while (<>) {
    my ($name, $points) = split /: /;
    my @points = split ' ', $points;

    say $name, ': ', sum(@points) / @points;
}

【讨论】:

    【解决方案2】:

    不使用外部模块计算平均成绩

    use strict;
    use warnings;
    
    while(<DATA>) {
        my($k,$d) = split ':';
    
        printf "%20s : %.2f\n", $k, average($d);
    }
    
    sub average {
        my $data = shift;
    
        my(@data,$sum);
    
        @data = split ' ', $data;
        $sum += $_ for @data;
    
        return $sum/@data;
    }
    
    __DATA__
    Melotti, Suzanne: 100 100 95 95 92 87
    Wayne, Bruce: 85 85 85 75 75 75
    Stark, Tony: 92 92 75 79 91 87
    Odinson, Thor: 23 12 10 42 50 64
    Kane, Kathy: 100 100 100 100 95 95
    Rogers, Steven: 92 91 91 90 87 84
    Murdock, Matthew: 100 100 100 99 99 98
    VonDoom, Victor: 75 75 72 73 74 80
    Queen, Olvider: 92 83 74 65 100 66
    Hall, Carter: 23 12 10 42 50 64
    Xavier, Charles: 100 100 95 95 92 87
    

    输出

    Melotti, Suzanne : 94.83
        Wayne, Bruce : 80.00
         Stark, Tony : 86.00
       Odinson, Thor : 33.50
         Kane, Kathy : 98.33
      Rogers, Steven : 89.17
    Murdock, Matthew : 99.33
     VonDoom, Victor : 74.83
      Queen, Olvider : 80.00
        Hall, Carter : 33.50
     Xavier, Charles : 94.83
    

    【讨论】:

      猜你喜欢
      • 2012-12-06
      • 2015-06-26
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多