gpt4 book ai didi

perl - 遍历数组后返回 bool 值

转载 作者:行者123 更新时间:2023-12-03 23:33:39 25 4
gpt4 key购买 nike

我正在尝试查看 keyword_objects 是否有元素 {name=>'CRASH', status=>'+'}

# $bug is a reference to the below data
{
'keyword_objects' => [
bless( { 'name' => 'CRASH', 'status' => '+'}, 'SomeModule::SomeFilename' ),
bless( { 'name' => 'CUSTOMER', 'status' => '-' }, 'SomeModule::SomeFilename' ) ],
'category' => 'error'
}

我在另一种语言中找不到像 filter 这样的东西,所以我的替代方法是使用 map

my @isCrash = map { $_->name eq 'CRASH' && $_->status eq '+' } @{ $bug->{keyword_objects} };

这样做的问题是,当没有这样的关键字时,每次操作完成,它似乎返回一个空值。 @isCrash 变成一个包含多个空值的数组,而 if(@isCrash) 变得无用。我当然可以引入一个可以从 map 操作中更改的新变量,但我觉得应该有更好的方法来做到这一点。请有人加入并分享您的知识。

最佳答案

在 Perl 中(实际上,在一般的 Unix 中),filter 拼写为 grep

my $is_crash = grep { $_->name eq 'CRASH' and $_->status eq '+' }
@{ $bug->{keyword_objects} };

来自 perldoc -f grep :

grep BLOCK LIST
grep EXPR,LIST

[ ... snip ...]

Evaluates the BLOCK or EXPR for each element of LIST (locally setting $_ to each element) and returns the list value consisting of those elements for which the expression evaluated to true. In scalar context, returns the number of times the expression was true.

所以 $is_crash 将包含输入列表中表达式为真的元素的数量。这可以用作 bool 值(因为零为假,所有其他整数为真)。

关于perl - 遍历数组后返回 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64924658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com