如何获取数组中元素的索引?

时间:2010-07-11 06:44:46

标签: perl

Perl是否有内置函数来获取数组中元素的索引?或者我需要自己写这样的功能? [相当于PHP array_search()或JavaScript array.indexOf()]

4 个答案:

答案 0 :(得分:43)

use List::Util qw(first);
$idx = first { $array[$_] eq 'whatever' } 0..$#array;

(List :: Util是核心)

use List::MoreUtils qw(firstidx);
$idx = firstidx { $_ eq 'whatever' } @array;

(List :: MoreUtils在CPAN上)

答案 1 :(得分:11)

这是5.10之后的方法,还有一个额外的好处,即确定有多少索引与给定值匹配。

my @matches = grep { $array[$_] ~~ $element } 0 .. $#array;

如果保证所有元素都是唯一的,或者只关注第一个索引:

my ($index) = grep { $array[$_] ~~ $element } 0 .. $#array;

答案 2 :(得分:6)

以下是autobox解决方案:

use autobox::Core;

my @things = qw/blue black green red green yellow/;

my $first_green = @things->first_index( sub{ $_[0] eq 'green' } ); # code block
my $last_green  = @things->last_index ( qr/^green$/ );             # or regex

say $first_green;    # => 2
say $last_green;     # => 4

答案 3 :(得分:3)

您可以为此编写一个函数:

sub array_search {
    my ($arr, $elem) = @_;
    my $idx;
    for my $i (0..$#$arr) {
        if ($arr->[$i] eq $elem) {
            $idx = $i;
            last;
        }
    }
    return $idx;            
}

将返回第一个匹配元素的索引,或undef