gpt4 book ai didi

Ruby 在具有偏移量的数组中查找

转载 作者:行者123 更新时间:2023-12-04 05:52:21 25 4
gpt4 key购买 nike

我正在寻找一种以更简洁的方式在 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 数组中搜索某个对象的索引,然后进行后续搜索以找到第一个匹配其他条件并在数组中具有更高索引的对象。有一个更好的方法吗?

我所说的更清洁是什么意思:不涉及显式切片数组的东西。当你这样做几次时,计算切片索引会很快变得困惑。我想继续在原始阵列上操作。它更易于理解且不易出错。

注意。在我的实际代码中,我没有对 Array 进行猴子修补,但我想提请注意这样一个事实,即我希望我正在复制 Array/Enumerable 的现有功能

编辑
  • offset + 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?
    }

    关于Ruby 在具有偏移量的数组中查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9925654/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com