我希望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)
以下是不同的问题.他们只询问数组中的第一个匹配,加上一个:
以下问题更接近,但仍然无法帮助我,因为我需要在继续下一个之前处理第一个匹配(这种方式也与修改冲突):
当然,一种方法是:
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_index
andArray#index
仍然没有进入该语言。然而,我注意到Regexp#match(str,pos)
直到 1.9 版本才出现,这同样令人惊讶。
归档时间: |
|
查看次数: |
634 次 |
最近记录: |