Ruby在数组中找到偏移量

我正在寻找一种方法,以更清洁的方式在Ruby中执行以下操作:

class Array def find_index_with_offset(offset, &block) [offset..-1].find &block end end offset = array.find_index {|element| element.meets_some_criterion?} the_object_I_want = array.find_index_with_offset(offset+1) {|element| element.meets_another_criterion?} 

所以我在Ruby数组中搜索某个对象的索引,然后我进行后续搜索,找到匹配其他条件的第一个对象,并在数组中有更高的索引。 有一个更好的方法吗?

我对清洁工的意思是什么:不涉及明确切割数组的东西。 当你这样做几次时,计算切片索引会很快变得混乱。 我想继续操作原始arrays。 它更容易理解,更不容易出错。

NB。 在我的实际代码中,我没有使用猴子修补数组,但我想提请注意我希望我复制数组/可枚举的现有function这一事实


编辑

  • 根据MladenJablanović的评论, offset + 1固定位置; 重写错误
  • 根据MladenJablanović的评论增加了对“清洁剂”的解释

清洁工在这里显然是主观的。 如果你的目标是短暂的,我认为你不能做得更好。 如果你想能够链接多个这样的发现,或者你被切片困扰,你可以这样做:

 module Enumerable def find_multi *procs return nil if procs.empty? find do |e| if procs.first.call(e) procs.shift next true if procs.empty? end false end end end a = (1..10).to_a p a.find_multi(lambda{|e| e % 5 == 0}, lambda{|e| e % 3 == 0}, lambda{|e| e % 4 == 0}) #=> 8 

编辑:如果您不关心性能,您可以执行以下操作:

 array.drop_while{|element| !element.meets_some_criterion? }.drop(1).find{|element| element.meets_another_criterion? }