加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

arrays – 通过Perl中的哈希引用数组获取切片

发布时间:2020-12-15 23:22:42 所属栏目:大数据 来源:网络整理
导读:关于复杂的数据结构,我有一个与Perl相关的问题.我在托管Apache的 Linux(Centos v5)服务器上运行Perl版本5.8.8.我正在询问MS-SQL数据库.我正在使用“DBI”Perl模块. 我有一个SQL查询结果表,编码为对哈希引用数组的引用.因此,表中的每一行都是一个包含哈希引用
关于复杂的数据结构,我有一个与Perl相关的问题.我在托管Apache的 Linux(Centos v5)服务器上运行Perl版本5.8.8.我正在询问MS-SQL数据库.我正在使用“DBI”Perl模块.

我有一个SQL查询结果表,编码为对哈希引用数组的引用.因此,表中的每一行都是一个包含哈希引用的数组元素,使用DBI模块的“fetchrow_hashref”命令获得.每个散列的键对应于列标题和对应于该列标题下的表中的特定单元格的值.

我想要做的是获得一列列数据.似乎在DBI文档中描述了一些关于如何获取列数据的方法,但对我来说它们有点不透明,一般都知道如何通过一组哈希引用获取切片作为练习了解perl引用/解除引用的工作原理.

所以,基本上,鉴于此:

my %datarow1 = {"firstname"=> "dave","bar"=>"smith"};
my %datarow2 = {"firstname"=> "john","bar"=>"doe"};
my %datarow3 = {"firstname"=> "kim","bar"=>"kardashian"};

引用如下:

my @rows = (%datarow1,%datarow2,%datarow3);
my $rowsref=@rows;

我怎么得到这个数组?:

("dave","john","kim")

我试过这个:

my @columndata=@$rowsref->[0]{"firstname"}

但这只能得到列中的第一个单元格(即包含一个元素“dave”的数组).
必须有一种优雅的方式在一行中做到这一点 – 如果你的perl大师可以帮助我,我会非常感激.

谢谢

C J

解决方法

一些事情要开始:

这不是你定义哈希的方式:

my %datarow1 = {"firstname"=> "dave","bar"=>"smith"};

这行代码将哈希引用分配给哈希,这会产生如下结构:

( 'HASH(0x7f4ef0545e18)' => undef )

可能不是你想要的.

要正确定义哈希,请用括号替换花括号:

my %datarow1 = ("firstname"=> "dave","bar"=>"smith");

始终启用严格模式和警告:

use strict;
use warnings;

这会错误地分配对哈希的引用.

现在,真正的问题是“如何从数组中保存的哈希引用中提取特定键?”

答案与Hash引用不在数组中的方式完全相同:

my $h_ref = { a => b };
# get key 'a'
my $a = $h_ref->{a};

唯一的区别是您需要在数组上应用此操作.在数组上应用操作是map内置的目的:

use strict;
use warnings; 

my %datarow1 = ("firstname"=> "dave","bar"=>"smith");
my %datarow2 = ("firstname"=> "john","bar"=>"doe");
my %datarow3 = ("firstname"=> "kim","bar"=>"kardashian");

my @rows = (%datarow1,%datarow3);
my $rowsref=@rows;
my @firstnames = map { $_->{firstname} } @$rowsref; 
# dave john kim

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读