简体   繁体   English

查找哈希值的平均值 Perl

[英]Find average of hash values Perl

I am looking to return an average of the hash values (per key) below (grades.txt)我希望在(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

My subroutine looks like this so far:到目前为止,我的子程序如下所示:

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

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

        }
    }
}

Use sum from List::Util .使用List::Util 中的sum To get the number of elements, just use an array in scalar context.要获取元素的数量,只需在标量上下文中使用数组。

#!/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;
}

Calculation of average grade without external modules没有外部模块的平均成绩计算

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

Output输出

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM