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

如何用Perl创建值为数组的哈希:按年份分组文件数据

如何用Perl构建以年份为键、对应元素数组为值的哈希

没问题,我来给你一步步实现这个需求。核心思路就是把输入的字符串拆分成三元组(每个组是aX、年份、scoreX),然后把每个aX归类到对应年份的数组里。

完整代码示例

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper; # 用来直观输出哈希结构,方便验证结果

# 你的原始输入字符串
my $input = 'a1 1901 score1 a2 1901 score2 a3 1902 score3 a4 1902 score4 a5 1903 score6 a6 1903 score7';

# 将字符串按空格拆分成单个元素的列表
my @elements = split /\s+/, $input;

# 初始化用于存储结果的哈希
my %year_grouped_items;

# 循环处理每一组三元元素
while (@elements) {
    # 每次从列表头部取出3个元素,分别对应项目、年份、分数(分数我们不需要,直接忽略)
    my ($item, $year, $score) = splice @elements, 0, 3;
    
    # 将当前项目添加到对应年份的数组中
    # Perl会自动为不存在的年份键创建空数组引用,非常方便
    push @{ $year_grouped_items{$year} }, $item;
}

# 打印结果,验证是否符合预期
print Dumper(\%year_grouped_items);

代码关键点解释

  • 拆分输入:split /\s+/, $input 会把输入字符串按任意数量的空格(包括多个连续空格)拆分成独立元素的列表,这样我们就能逐个处理每个三元组。
  • 循环处理三元组:while (@elements) 会一直循环,直到所有元素都被处理完毕。splice @elements, 0, 3 每次从列表开头截取3个元素,完美匹配我们的三元组结构。
  • 哈希数组赋值:push @{ $year_grouped_items{$year} }, $item 是这里的核心操作——Perl支持自动引用创建,当某个年份在哈希中还没有对应的数组时,它会自动生成一个空数组引用,然后我们把当前的aX元素追加到这个数组里。

运行结果

执行这段代码后,你会得到如下的输出(格式由Data::Dumper自动生成):

$VAR1 = {
          '1901' => [
                      'a1',
                      'a2'
                    ],
          '1902' => [
                      'a3',
                      'a4'
                    ],
          '1903' => [
                      'a5',
                      'a6'
                    ]
        };

完全符合你要的“年份为键,对应年份的第一列元素数组为值”的需求。

内容的提问来源于stack exchange,提问作者swati sinha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:22:50