Как получить индекс элемента в массиве?

Perl имеет сборку - в функции для получения индекса элемента в массиве? Или я должен записать такую функцию один? [эквивалентный PHP array_search () или JavaScript array.indexOf ()]

24
задан Justin Johnson 11 July 2010 в 15:44
поделиться

4 ответа

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)

46
ответ дан 28 November 2019 в 22:36
поделиться

Вот способ сделать это после версии 5.10 с дополнительным преимуществом определения количества индексов, соответствующих заданному значению.

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

Если все элементы гарантированно уникальны или интересует только первый индекс:

my ($index) = grep { $array[$_] ~~ $element } 0 .. $#array;
11
ответ дан 28 November 2019 в 22:36
поделиться

Вы можете написать функцию для этого:

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

Будет возвращен индекс первого подходящего элемента или undef.

3
ответ дан 28 November 2019 в 22:36
поделиться

Вот решение 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
6
ответ дан 28 November 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: