Perl,获取所有哈希值

时间:2010-06-15 20:16:28

标签: perl list hash

让我们说在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中有更简洁的方法吗?

5 个答案:

答案 0 :(得分:6)

是。有。。

my @list = map {
    exists $_->{foo} ? $_->{foo} : die 'hashed lacked foo'
  }
  @hash_list
;

答案 1 :(得分:2)

您可以使用地图功能:

@hash_list = (
 {foo=>1},
 {foo=>2}
);

@list = map($_->{foo}, @hash_list);

map将第一个参数中的函数应用于第二个参数的所有元素。

grep对于过滤列表中的元素也很酷,并且工作方式相同。

答案 2 :(得分:1)

Evan的答案很接近,但会返回hashrefs而不是foo的值。

my @list = map $_->{foo} grep { exists $_->{foo} } @hash_list

答案 3 :(得分:0)

if ( @hash_list != grep { exists $_->{foo} } @hash_list ) {
    # test failed
}

答案 4 :(得分:0)

TLDR 答案

如果您想获取哈希值,请使用 values() 函数。像这样...

print Dumper(values %$hash);

来源

<块引用>

值 HASH

在列表上下文中,返回一个包含命名哈希的所有值的列表。

(来源:PerlDoc.org.

演示

在线演示: IDEOne

use Data::Dumper;

my $hash = {
    soybeans=>1,
    chickpeas=>2,
};

print Dumper(values %$hash);