[英]Perl, get all hash values
假设在 Perl 中,我有一个哈希引用列表,每个引用都需要包含某个字段,比如说foo
。 我想创建一个包含foo
所有映射的列表。 如果存在不包含foo
的散列,则该过程应该失败。
@hash_list = (
{foo=>1},
{foo=>2}
);
my @list = ();
foreach my $item (@hash_list) {
push(@list,$item->{foo});
}
#list should be (1,2);
在 Perl 中有更简洁的方法吗?
是的。 有。
my @list = map {
exists $_->{foo} ? $_->{foo} : die 'hashed lacked foo'
}
@hash_list
;
Evan 的回答很接近,但会返回 hashrefs 而不是 foo 的值。
my @list = map $_->{foo} grep { exists $_->{foo} } @hash_list
您可以为此使用地图功能:
@hash_list = (
{foo=>1},
{foo=>2}
);
@list = map($_->{foo}, @hash_list);
map 将第一个参数中的函数应用于第二个参数的所有元素。
grep 过滤列表中的元素也很酷,工作方式相同。
if ( @hash_list != grep { exists $_->{foo} } @hash_list ) {
# test failed
}
如果要获取哈希值,请使用values()
函数。 像这样...
print Dumper(values %$hash);
值哈希
在列表上下文中,返回一个由命名散列的所有值组成的列表。
(来源: PerlDoc.org。 )
在线工作演示: IDEOne
use Data::Dumper;
my $hash = {
soybeans=>1,
chickpeas=>2,
};
print Dumper(values %$hash);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.