我在数组文档中缺少什么吗?我有一个数组,其中包含最多一个满足特定条件的对象。我想有效地找到那个对象。我从文档中得到的最好的主意是:
candidates = my_array.select { |e| e.satisfies_condition? } found_it = candidates.first if !candidates.empty? 但我不满意有两个原因:
select即使我可以在第一次命中后保释,这也使我遍历了整个数组。 我需要一行代码(有条件)来压平候选人。 事先知道存在0或1个令人满意的对象,这两个操作都是浪费的。
我想要的是这样的:
array.find_first(block) 它返回nil或该块对其求值为真的第一个对象,从而在该对象处结束遍历。
我必须自己写这个吗?Array中所有其他出色的方法都使我觉得它在那里,而我只是没有看到它。 问题来源于stack overflow
detect如果要返回第一个值,而块返回true,则使用数组方法
[1,2,3,11,34].detect(&:even?) #=> 2
OR
[1,2,3,11,34].detect{|i| i.even?} #=> 2 如果要返回所有值,其中block返回true,则使用 select
[1,2,3,11,34].select(&:even?) #=> [2, 34]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。