我需要在数组中找到值而不遍历整个数组 我从文件中获取了一系列字符串,我需要在这个数组中得到一些值的索引,我已经尝试过这段代码,但它没有用。
my @array =<$file>;
my $search = "SomeValue";
my $index = first { $array[$_] eq $search } 0 .. $#array;
print "index of $search = $index\n";
请建议我如何获得价值指数,或者如果有多个参赛作品,最好获得所有直线指数。
Thx提前。
答案 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;