【发布时间】:2021-01-09 15:10:40
【问题描述】:
我有一个 perl 哈希表
my %data= (
'John' => {
'company' => 'xxx',
'address' => 'San Francisco',
'contact' => ['phone1', 'phone2']
},
'Alice' => {
'company' => 'yyy',
'address' => 'Boston',
'contact' => ['phone3', 'phone4']
},
);
有没有一种方法可以将所有公司名称作为数组提取到一个变量中,而无需遍历哈希图?
即('xxx', 'yyy')
我已经尝试过以下方法,它确实有效,但想要一个更紧凑的解决方案,类似于下面提到的 python 中的列表理解。
@companies = ();
for my $person_data (values %data)
{
push(@companies, $person_data{'company'});
}
在 python 中,我可以使用以下列表理解来实现这一点:
companies = [person_data['company'] for person_data in data.values()]
【问题讨论】:
-
你尝试过什么,你在哪里卡住了?另外,请注意,您的数据结构看起来不像 Perl 哈希,而是像 JSON 字符串,这让您的问题有点不清楚。
-
我是说 Perl 哈希是从我上面提到的那种 JSON 加载的。显然,我尝试循环遍历哈希并将公司名称推送到数组中。但我需要知道是否有更清洁、更快的方法来做到这一点。例如:可以使用简单的
%hash = map { $_ => 1 } @array;将数组转换为散列 在python 中,即使我仍然循环遍历散列/字典,我也可以在一行中编写代码,如下companies = [value['company'] for value in data.values()]。如果我也能在 Perl 中做同样的事情就足够了。 -
请在下次显示有效的 Perl 哈希而不是 json。很清楚您想要做什么,但是 Perl 散列可以为想要回答问题的人节省时间。请参阅我的问题中的示例。您也可以使用
Data::Dumper模块从您的代码中获取它。 :)
标签: arrays loops perl hashmap list-comprehension