如何在没有迭代的情况下在数组Perl中找到字符串的索引

时间:2015-03-09 19:03:50

标签: arrays regex string perl

我需要在数组中找到值而不遍历整个数组 我从文件中获取了一系列字符串,我需要在这个数组中得到一些值的索引,我已经尝试过这段代码,但它没有用。

my @array =<$file>;
my $search = "SomeValue";
my $index = first { $array[$_] eq $search } 0 .. $#array;

print "index of $search = $index\n";

请建议我如何获得价值指数,或者如果有多个参赛作品,最好获得所有直线指数。
Thx提前。

2 个答案:

答案 0 :(得分:2)

&#34;它不起作用&#34;意思?

您拥有的代码将正常工作,除了数组中的元素将是&#34; SomeValue \ n&#34;,而不是&#34; SomeValue&#34;。您可以使用chomp(@array)删除换行符,也可以在$ search字符串中添加换行符。

答案 1 :(得分:2)

您最初的问题:“我需要在数组中找到值而不遍历整个数组。”

你做不到。如果不检查数组的每个元素,就无法检查数组的每个元素。你能做到的最好的就是在你找到它之后停止寻找 - 但你在问题中指出多个匹配。

但他们仍然在做一个循环,他们只是隐藏在幕后。

List::Util不适合您的原因可能是因为您需要先从grep加载它。或者 - 您忘记了first,这意味着您的列表包含换行符,而搜索模式则没有。

无论如何 - 为了实际提供能够完成工作的东西:

List::Util

如果你想要每场比赛 - 省略chomp

或者 - 您可以匹配:

while ( my $line = <$file> ) {
   chomp ( $line );
   #could use regular expression based matching for e.g. substrings. 
   if ( $line eq $search ) { print "Match on line $.\n"; last; }
}

哪个子串匹配(这反过来意味着换行不相关)。

所以你可以这样做:

last;