2010-10-28 382 views
3

我想搜索数组中的元素。我想从这个搜索中得到的是我找到匹配的数组的所有索引。perl获取数组中匹配的索引

因此,例如我想搜索的词是:

$myWord = cat 

@allMyWords = my whole file with multiple occurrences of cat in random positions in file 

所以,如果发生在第3,第19和第110号的猫,我希望这些指数作为它的一个结果。我想知道是否有一个小而简单的方法来做到这一点。

谢谢!

回答

8

我得到了答案。这是将返回数组中我们正在搜索的元素的所有索引的代码。

my(@index)= grep { $allMyWords[$_] eq $word } 0..$#allMyWords; 
print "Index : @index\n"; 
+0

但是,这是一个小问题。总的来说,这看起来像最优雅的方法。 – 2010-10-28 06:14:12

+0

对于像我这样的人寻找一个字符串相当于: 'my @locations = grep {substr($ aString,$ _,1)eq“C”} 0 ..(length($ aString));'' – 2014-12-04 17:31:59

7

随着List::MoreUtils

use List::MoreUtils qw(indexes); 

my @indexes = indexes { $_ eq 'cat' } @words; 

如果你没有看过的文件还没有,则可以使用 “思乐普模式” 解读:

local $/; # enable slurp mode 
my @words = split(/\s+/, <>);