perl:如何知道字符串在列表中的匹配位置?

时间:2017-06-24 10:27:15

标签: arrays list perl match

我有一个与此类似的列表:

my @foo=qw(bar foo fou foobar);

我想得到一个匹配的数组(例如:with foo)。我现在正在使用此代码:

my $i=0;
foreach (@foo)
{
    print "$i\n" if "$_" eq "foo";
    $i+=1;
}

返回:

1

此代码有效,但我想知道是否有更聪明的方法可以做到这一点。

2 个答案:

答案 0 :(得分:3)

您可以使用grep

执行此操作
my @foo = qw(bar foo fou foobar);
my @indices = grep { $foo[$_] eq 'foo' } 0 .. $#foo;
# @indices = (1)

这将为您提供所有匹配索引的数组。

答案 1 :(得分:2)

使用first_index中的List::MoreUtils,就像这样

my $i = first_index { $_ eq 'foo' } @foo;
如果找不到值,

$i将设置为-1。

这可以在Perl中轻松实现,但List::MoreUtils是一个XS模块,因此应该运行得更快。