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