gpt4 book ai didi

Ruby Enumerable : get the first which is not nil, 但结果必须是 block 内的内容

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

Enumerable#find 方法通过评估直到它找到与 block 中的条件匹配的元素为止。第一次返回 block 未被评估为零时是否有类似的东西?想象一个人会有一组散列:

value = nil
options.each do |o|
break if value = o[:desired]
end
value ||= DEFAULT

难道没有一种方法可以做到这一点吗?

对集合进行大量转换没有意义,我想尽量减少分配次数,因此任何分配新数组的解决方案都不适合我。

最佳答案

find 方法将用于查找具有 :desired 键且迭代次数最少的第一个元素。

我认为您希望从 block 而不是元素本身获取 desired 键的值 - Enumerable 中没有任何方法表现得像 findmap - 您将必须使用在 block 内为其分配值的外部变量,如下所示。

options = [{foo: 1}, {desired: 2}, {bar: 3}]

value = nil
options.find do |o|
value = o[:desired]
break if value
end

p value
#=> 2

它或多或少看起来像您的代码,应该也能正常工作。

如果您想使用 Enumerable 方法,您可以使用下面的一种方法,但它会遍历所有元素。

p value = options.map { |o| value = o[:desired] }.compact.first

关于Ruby Enumerable : get the first which is not nil, 但结果必须是 block 内的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34656521/

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