如何解决perl 根据值创建多个数组并循环遍历它们
我正在使用 perl 从 mysql 数据库中获取数据。
我将“SELECT”结果存储在一个数组 ($res) 中:
$res = $sth->fetchall_arrayref;
我可以像这样循环遍历数组:
foreach $r1 (@{$res}) {
print @{$r1}[0],";",@{$r1}[1],@{$r1}[2],"\n";
}
每个 $r1 有 3 个元素,所以这是在 foreach 循环后打印内容的示例
1;100;A
2;105;C
3;100;G
4;500;A
5;200;B
6;650;B
7;204;A
我现在想要执行以下操作:基于每行的第三个元素创建子数组。
所以我想要一个数组“A”,其中包含第三个元素等于 A 的行:
1;100;A
4;500;A
7;204;A
等所有可能出现多次的第三个元素值。在本例中,这将导致 2 个数组:1 个用于“A”,1 个用于“B”。 "C" 和 "G" 不会有数组,因为它们只作为 $res 数组中的第三个元素出现一次。
然后我想逐行遍历所有结果数组。
如何在 perl 中实现这一点?
解决方法
惯用的方法是创建数组的散列。键是第三列的值,值是包含第 1 列和第 2 列值的匿名数组。
您还需要对哈希进行后处理并删除条目,而不是只有一个与键关联的值。
#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
my $res = [
[1,100,'A'],[2,105,'C'],[3,'G'],[4,500,[5,200,'B'],[6,650,[7,204,];
my %by3rd;
for my $r1 (@$res) {
push @{ $by3rd{ $r1->[2] } },[ @$r1[0,1] ];
}
for my $group (keys %by3rd) {
delete $by3rd{$group} if 1 == @{ $by3rd{$group} };
}
use Data::Dumper; print Dumper \%by3rd;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。