咨询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
相关产品推荐
相关产品推荐

