Perl是否有内置函数来获取数组中元素的索引?或者我需要自己写这样的功能?[相当于PHP array_search()或JavaScript array.indexOf()]
hob*_*bbs 46
use List::Util qw(first);
$idx = first { $array[$_] eq 'whatever' } 0..$#array;
Run Code Online (Sandbox Code Playgroud)
(List :: Util是核心)
要么
use List::MoreUtils qw(firstidx);
$idx = firstidx { $_ eq 'whatever' } @array;
Run Code Online (Sandbox Code Playgroud)
(List :: MoreUtils在CPAN上)
Zai*_*aid 11
这是一种5.10之后的方法,它具有确定与给定值匹配的索引数量的额外好处.
my @matches = grep { $array[$_] ~~ $element } 0 .. $#array;
Run Code Online (Sandbox Code Playgroud)
如果保证所有元素都是唯一的,或者只关注第一个索引:
my ($index) = grep { $array[$_] ~~ $element } 0 .. $#array;
Run Code Online (Sandbox Code Playgroud)
这是一个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
Run Code Online (Sandbox Code Playgroud)