gpt4 book ai didi

ruby - 在数组中找到 block 返回 true 的第一个元素并返回 block 的返回值

转载 作者:数据小太阳 更新时间:2023-10-29 07:07:12 25 4
gpt4 key购买 nike

我需要遍历数组并将提供的 block 应用于每个元素,并返回 block 返回的第一个真值,这意味着我需要在获得真值后立即停止。

下面是我的代码。我是 ruby 新手,我不确定这段代码是否是在重新发明轮子。也许已经有一个或多个库方法可以做到这一点?还是可以简化此代码?

RS = {
:x => %w(\d+ a\d+ bb\d+ ccc\d+).map{|x| /^#{x}$/},
:y => %w(\w+ 1\w+ 22\w+ 333\w+).map{|x| /^#{x}$/}
}.freeze

def find s, t
r = RS[s]
if r
r.each do |p|
m = p.match t
return m if m
end
nil
end
end

p find :x, 'bb12345'

最佳答案

如果你想要 block 的结果,你可以这样做。这将遍历整个数组,但不会评估第一个之后的任何匹配项。

def find(s,t)
RS[s].inject(nil) {|m, p| m || p.match(t)}
end

你可以早点突破做这样的事情

RS[s].inject(nil) {|m, p| (m && (break m)) || p.match(t)}

关于ruby - 在数组中找到 block 返回 true 的第一个元素并返回 block 的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419760/

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