Perl中如何将数组相似元素分组后在foreach中批量处理
Perl数组元素配对分组解决方案
实现思路
- 分组相似元素:用哈希表将数组中去除
_n/_p后相同的元素归为一组,键为去除标识后的基准字符串,值为对应的_n/_p元素数组。 - 筛选配对元素:遍历每个分组,通过正则筛选出对应
_n和_p的元素。 - 格式化输出:用格式化输出保证格式统一,同时将结果写入指定文件。
完整代码
#!/usr/bin/perl use strict; use warnings; # 输入数组 my @array = qw(abc_n abc_p gg_n gg_p munday_n_xy munday_p_xy soc_n soc_p); # 哈希表存储分组后的引脚对 my %pin_groups; foreach my $pin (@array) { # 生成分组键:移除字符串中的_n或_p(非破坏性替换,不修改原字符串) my $group_key = $pin =~ s/_[np]//r; push @{$pin_groups{$group_key}}, $pin; } # 打开输出文件,失败则抛出错误 open my $out_fh, '>', 'output.txt' or die "无法打开输出文件: $!"; # 遍历每个分组,生成目标格式输出 foreach my $key (sort keys %pin_groups) { # 从分组中筛选出_n和_p对应的元素 my ($n_pin) = grep { /_n/ } @{$pin_groups{$key}}; my ($p_pin) = grep { /_p/ } @{$pin_groups{$key}}; # 格式化写入文件,保证格式与示例一致 printf $out_fh "DUF A1 ( .pin1(%s), .pin2(%s));\n", $n_pin, $p_pin; } close $out_fh;
代码细节说明
- 严格模式与警告:
use strict; use warnings;强制规范代码写法,避免未声明变量、正则错误等潜在问题。 - 分组键生成:
s/_[np]//r是Perl 5.14及以上支持的非破坏性替换,直接返回处理后的字符串作为分组键,确保原元素不受修改。 - 元素筛选:
grep { /_n/ }精准匹配分组中带_n的元素,保证配对的准确性,即使数组元素顺序混乱也能正确筛选。 - 格式化输出:
printf确保.pin2前有两个空格,输出格式完全符合示例要求;文件操作使用词法文件句柄$out_fh,比全局句柄更安全。
内容的提问来源于stack exchange,提问作者vikas
相关产品推荐
相关产品推荐

