Ruby数组find_first对象?
我在Array文档中遗漏了什么? 我有一个数组,其中包含多达一个对象满足一定的标准。 我想有效地find这个对象。 我从文档中得到的最好的想法是这样的:
candidates = my_array.select { |e| e.satisfies_condition? } found_it = candidates.first if !candidates.empty?
但是我不满意的原因有两个:(1)即使我们可以在第一次命中后获得保释,但是select使我遍历整个arrays,(2)我需要一行代码(有条件)来压平候选人。 两种操作都是浪费的,预知有0个或1个令人满意的对象。
我想要的是这样的:
array.find_first(block)
– >回答nil或array.find_first(block)
的第一个对象为true,结束对象的遍历。
我必须自己写这个吗? Array中的所有其他伟大的方法都让我觉得它在那里,我只是没有看到它。
在此先感谢,丹
要么我不明白你的问题,或Enumerable#find是你正在寻找的东西。
如果你想在block返回true时返回第一个值,使用数组detect
方法
[1,2,3,11,34].detect(&:even?) #=> 2 OR [1,2,3,11,34].detect{|i| i.even?} #=> 2
如果你想返回所有的值在块返回true然后使用select
[1,2,3,11,34].select(&:even?) #=> [2, 34]
猜猜你错过了文档中的查找方法:
my_array.find {|e| e.satisfies_condition? }
你是否需要这个对象本身,或者你只需要知道是否有一个满足的对象。 如果前者则是:使用find:
found_object = my_array.find { |e| e.satisfies_condition? }
否则你可以使用any?
found_it = my_array.any? { |e| e.satisfies_condition? }
当后者发现一个满足条件的人时,他们将以“真实”保释。 前者会做同样的事情,但返回的对象。