我有一个与此类似的列表:
my @foo=qw(bar foo fou foobar);
我想得到一个匹配的数组(例如:with foo)。我现在正在使用此代码:
my $i=0;
foreach (@foo)
{
print "$i\n" if "$_" eq "foo";
$i+=1;
}
返回:
1
此代码有效,但我想知道是否有更聪明的方法可以做到这一点。
答案 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模块,因此应该运行得更快。