带偏移量的数组中的Ruby查找
我正在寻找一种在Ruby中以更干净的方式执行以下操作的方法:带偏移量的数组中的Ruby查找,ruby,arrays,search,offset,Ruby,Arrays,Search,Offset,我正在寻找一种在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
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数组中搜索某个对象的索引,然后我进行后续搜索,找到第一个与其他条件匹配的对象,并且在数组中有一个更高的索引。有更好的方法吗
我所说的“清理器”是什么意思:它不涉及对数组进行显式切片。当你这样做几次时,计算切片索引会很快变得混乱。我想继续在原始阵列上操作。它更容易理解,也不容易出错
注意。在我的实际代码中,我没有使用猴子补丁数组,但我想提请大家注意,我希望我复制的是数组/枚举的现有功能
编辑
- 根据Mladen Jablanović的评论,偏移量+1的固定位置;重写错误
- 根据Mladen Jablanović的评论,增加了对“清洁剂”的解释
清洁剂显然是主观问题。如果你的目标很短,我认为你没有比这更好的了。如果您希望能够链接多个这样的查找,或者为切片而烦恼,您可以执行以下操作:
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?
}
你说的“清洁剂”是什么意思?你的解决方案有什么困扰?
[]
创建新数组的事实?或者只是美观?顺便说一句,我认为您应该在[offset..-1]
中搜索,然后将(offset+1)
传递给稍后的方法调用。这样更符合逻辑。如果您想避免切片,简单循环更干净