You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询Perl实现冰球日期、进球、助攻数据关联及总计筛选的方案

用Perl处理冰球比赛数据:关联统计与筛选总计

1. 数据存储方案

不用数据库,直接用Perl的**哈希数组(Array of Hashes)**存储每条比赛记录,每条记录包含date(日期)、goals(进球数)、assists(助攻数)三个字段,天然实现日期与数据的关联,适合40行左右的小规模数据。

2. 完整实现代码

以下是包含数据存储、打印、总计、筛选功能的完整脚本,可直接运行并扩展:

#!/usr/bin/perl
use strict;
use warnings;

# 方式1:直接定义模拟数据(替换为你的实际数据)
my @hockey_data = (
    { date => '10/24', goals => 2, assists => 1 },
    { date => '10/25', goals => 0, assists => 3 },
    { date => '10/26', goals => 1, assists => 0 },
    # 继续添加剩余数据...
);

# 方式2:从文本文件读取数据(推荐,便于维护)
# 假设data.txt每行格式为:日期 进球数 助攻数(如:10/24 2 1)
# open my $fh, '<', 'data.txt' or die "无法打开文件: $!";
# my @hockey_data;
# while (my $line = <$fh>) {
#     chomp $line;
#     my ($date, $goals, $assists) = split /\s+/, $line;
#     push @hockey_data, {
#         date => $date,
#         goals => int($goals),
#         assists => int($assists)
#     };
# }
# close $fh;

# 格式化打印单条记录(处理助攻单复数)
sub print_record {
    my ($record) = @_;
    printf "%s %d goals %d assist%s\n",
        $record->{date},
        $record->{goals},
        $record->{assists},
        $record->{assists} != 1 ? 's' : '';
}

# 打印所有比赛数据
print "=== 所有比赛记录 ===\n";
foreach my $game (@hockey_data) {
    print_record($game);
}

# 计算指定数据集的总计
sub calculate_totals {
    my ($data_set) = @_;
    my ($total_goals, $total_assists) = (0, 0);
    foreach my $game (@$data_set) {
        $total_goals += $game->{goals};
        $total_assists += $game->{assists};
    }
    return ($total_goals, $total_assists);
}

# 打印整体总计
my ($total_g, $total_a) = calculate_totals(\@hockey_data);
print "\n=== 整体总计 ===\n";
print "总进球: $total_g, 总助攻: $total_a\n";

# 示例1:筛选进球数≥1的比赛
print "\n=== 进球数≥1的比赛 ===\n";
my @high_goal_games = grep { $_->{goals} >= 1 } @hockey_data;
foreach my $game (@high_goal_games) {
    print_record($game);
}

# 打印筛选后的总计
my ($filtered_g, $filtered_a) = calculate_totals(\@high_goal_games);
print "\n=== 筛选后总计 ===\n";
print "总进球: $filtered_g, 总助攻: $filtered_a\n";

# 示例2:筛选指定日期范围的比赛(如10月24日至10月25日)
print "\n=== 10/24-10/25的比赛 ===\n";
my @date_range_games = grep {
    $_->{date} ge '10/24' && $_->{date} le '10/25'
} @hockey_data;
foreach my $game (@date_range_games) {
    print_record($game);
}

3. 关键功能说明

  • 数据结构:哈希数组让每条记录的字段清晰易读,修改或扩展字段(如添加对手队名)只需调整哈希结构。
  • 筛选功能:用Perl内置的grep函数快速过滤数据,语法简洁高效,适合小规模数据集。
  • 总计计算:通过遍历数据集累加数值,逻辑直观,无需复杂SQL语句。
  • 格式优化:自动处理助攻数的单复数(1 assist / N assists),让输出更符合自然语言习惯。

内容的提问来源于stack exchange,提问作者Mark Scheck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:50:33