繁体   English   中英

Perl,获取所有哈希值

[英]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
}

TLDR 答案

如果要获取哈希值,请使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM