У Perl есть встроенная функция для получения индекса элемента в массиве? Или мне нужно написать такую функцию самостоятельно? [эквивалентно PHP array_search() или JavaScript array.indexOf()]
Как получить индекс элемента в массиве?
Ответ 1
use List::Util qw(first);
$idx = first { $array[$_] eq 'whatever' } 0..$#array;
(List:: Util - это ядро)
или
use List::MoreUtils qw(firstidx);
$idx = firstidx { $_ eq 'whatever' } @array;
(Список:: MoreUtils находится в CPAN)
Ответ 2
Здесь используется способ post-5.10, с дополнительным преимуществом определения того, сколько индексов соответствует заданному значению.
my @matches = grep { $array[$_] ~~ $element } 0 .. $#array;
Если все элементы гарантированно уникальны или интересен только первый индекс:
my ($index) = grep { $array[$_] ~~ $element } 0 .. $#array;
Ответ 3
Вот 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
Ответ 4
Вы можете написать для этого функцию:
sub array_search {
my ($arr, $elem) = @_;
my $idx;
for my $i (0..$#$arr) {
if ($arr->[$i] eq $elem) {
$idx = $i;
last;
}
}
return $idx;
}
Будет возвращен индекс первого элемента соответствия или undef
.