代码之家  ›  专栏  ›  技术社区  ›  CW Holeman II

如果有符合特定条件的数组,是否在其中查找该项(Perl)?

  •  4
  • CW Holeman II  · 技术社区  · 14 年前

    如果数组中有符合特定条件的项,是否有一个Perl习语来查找该项?

    my $match = 0;
    foreach(@list){
       if (match_test($_)){
          $result = $_;
          $match = 1;
          last;
          }
       }
    $match || die("No match.");
    say $result, " is a match.";
    

    这个例子似乎有点尴尬。我希望Perl有一些东西可以更清晰地处理这个问题。

    2 回复  |  直到 14 年前
        1
  •  14
  •   Eric Strom    14 年前

    对, grep 您正在寻找的是:

    my @results = grep {match_test($_)} @list;
    

    grep 返回的子集 @list 哪里 match_test 返回true。 格雷普 被称为 filter 在大多数其他功能语言中。

    如果你只想要第一场比赛,用 first List::Util .

    use List::Util qw/first/;
    
    if (my $result = first {match_test($_)} @list) {
        # use $result for something
    } else {
        die "no match\n";
    }
    
        2
  •  6
  •   Ether    14 年前

    如果可能有多个匹配项:

     my @matches = grep { match_test($_) } @list;
    

    如果只有一场比赛, List::Util “s”first“更快(假设找到匹配项):

     use List::Util 'first';
     if (my $match = first { match_test($_)} @list)
     {
          # do something with the match...
     }