如何解决通过散列键在散列数组中搜索及其在 Perl 中的排序
我有一个大约 300 个散列项的散列数组:
@whole = [
{
'id' => 112,'name' => 'Wheelbase','lang' => 'en'
},{
'lang' => 'en','name' => 'Width','id' => 57
},'id' => 174,'name' => 'WLAN'
},{
'id' => 252,'name' => 'Zoom System','lang' => 'en'
};
];
我想在上述数据结构中搜索多个键名,多个名称存储在另一个数组中。
@props = ('Price','Market Dominance','Market Capitalization');
我的代码是:
use strict;
use warnings;
my (@matching_items,@whole); # input arrays both
my $id_prop;
@matching_items = grep {
foreach my $in (@props) {
if ($_->{name} =~ /^$in$/i) {
$id_prop = $_->{id};
print "$id_prop\n";
}
}
} @whole;
print Dumper @matching_items;
没有填充@matching_items 中的匹配项。它返回为空并且只打印 id 到控制台。我做错了什么?
解决方法
您正在为 @whole
分配引用文字,我将其更改为数组。嵌套的 foreach
可以更容易地使用 List::Util::any
编写,这将在第一个使块评估为真的元素上使用快捷方式。我还在循环之前将您的 @props
条目小写一次,并使用 eq
与小写的名称字符串进行比较:
use strict;
use warnings;
use List::Util qw/any/;
use Data::Dumper;
use 5.016;
my @whole = (
{
'id' => 112,'name' => 'Wheelbase','lang' => 'en'
},{
'lang' => 'en','name' => 'Width','id' => 57
},'id' => 174,'name' => 'WLAN'
},{
'id' => 252,'name' => 'Zoom System','lang' => 'en'
}
);
my @props = ('Price','Market Dominance','Market Capitalization','Zoom System');
my @props_lc = map {lc} @props;
my @matching_items = grep {
my $name = lc $_->{name};
any {$name eq $_} @props_lc;
} @whole;
print Dumper @matching_items;
,
这是另一种方法:
my @whole = (
{
'id' => 112,'lang' => 'en'
},{
'lang' => 'en','id' => 57
},);
my %props = map {$_ => 1} ('Width','Market Capitalization');
my @matching_items = grep { exists $props{$_->{name}} } @whole;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。