Ruby:在数组中查找下一个匹配的索引,或者使用offset查找

mar*_*njs 5 ruby arrays

我希望Array#find_index { |item| block }第一次在比赛后找到更多的比赛.如何搜索第二场比赛,第三场比赛等的索引?

换句话说,我想要相当于for 的pos参数.然后我可以保持当前位置索引继续搜索.Regexp#match(str, pos)Array#find_index

我无法使用,Enumerable#find_all因为我可能会在调用之间修改数组(在这种情况下,我还会调整当前位置索引以反映修改).我不想复制部分数组,因为这会增加我的算法的计算复杂性.我想这样做而不复制数组:

new_pos = pos + array[pos..-1].find_index do |elem|
    elem.matches_condition?
end
Run Code Online (Sandbox Code Playgroud)

以下是不同的问题.他们只询问数组中的第一个匹配,加上一个:

以下问题更接近,但仍然无法帮助我,因为我需要在继续下一个之前处理第一个匹配(这种方式也与修改冲突):

mar*_*njs 1

当然,一种方法是:

new_pos = pos + (pos...array.size).find_index do |index|
    elem = array[index]
    elem.matches_condition?
end
Run Code Online (Sandbox Code Playgroud)

然而,这种做法很笨拙,而且很容易出错。例如,您可能忘记添加pos. 另外,您必须确保elem没有遮蔽某些东西。这两种情况都可能导致难以追踪的错误。

我发现很难相信索引参数Array#find_indexandArray#index仍然没有进入该语言。然而,我注意到Regexp#match(str,pos)直到 1.9 版本才出现,这同样令人惊讶。