126 ruby arrays performance find
我在Array文档中遗漏了什么吗?我有一个数组,其中包含最多一个满足某个标准的对象.我想有效地找到那个对象.我从文档中得到的最好的想法是这样的:
candidates = my_array.select { |e| e.satisfies_condition? }
found_it = candidates.first if !candidates.empty?
Run Code Online (Sandbox Code Playgroud)
但我不满意的原因有两个:(1)选择让我遍历整个阵列,即使我们可以在第一次击中后保释,并且(2)我需要一行代码(有条件)来压缩候选人.这两个操作都是浪费,预知有0或1个令人满意的对象.
我想要的是:
select - >回答nil或块评估为true的第一个对象,结束该对象的遍历.
我必须自己写这个吗?在Array中所有其他优秀的方法让我觉得它就在那里,我只是没有看到它.
提前谢谢,丹
Mla*_*vić 188
我不明白你的问题,或者Enumerable #find是你正在寻找的东西.
San*_*ing 87
detect如果要返回块返回true的第一个值,请使用array 方法
[1,2,3,11,34].detect(&:even?) #=> 2
OR
[1,2,3,11,34].detect{|i| i.even?} #=> 2
Run Code Online (Sandbox Code Playgroud)
如果要返回块返回true的所有值,请使用 select
[1,2,3,11,34].select(&:even?) #=> [2, 34]
Run Code Online (Sandbox Code Playgroud)
sep*_*p2k 18
猜猜你错过了文档中的find方法:
my_array.find {|e| e.satisfies_condition? }
Run Code Online (Sandbox Code Playgroud)
Tar*_*ast 12
你所需要的对象本身,或者你只需要知道,如果有是一个对象,它满足.如果前者那么是:使用find:
found_object = my_array.find { |e| e.satisfies_condition? }
Run Code Online (Sandbox Code Playgroud)
否则你可以使用 any?
found_it = my_array.any? { |e| e.satisfies_condition? }
Run Code Online (Sandbox Code Playgroud)
当后者在找到满足条件的情况下,将以"真实"保释.前者也会这样做,但返回对象.
| 归档时间: |
|
| 查看次数: |
93397 次 |
| 最近记录: |