【发布时间】:2011-01-23 18:45:39
【问题描述】:
我是否遗漏了 Array 文档中的某些内容?我有一个数组,其中最多包含一个满足某个标准的对象。我想有效地找到那个对象。我从文档中得到的最好的想法是:
candidates = my_array.select { |e| e.satisfies_condition? }
found_it = candidates.first if !candidates.empty?
但我不满意有两个原因:
-
select让我遍历了整个数组,尽管我们本可以在第一次命中后放弃。 - 我需要一行代码(带有条件)来扁平化候选人。
这两种操作都是浪费的,因为预先知道有 0 或 1 个令人满意的对象。
我想要的是这样的:
array.find_first(block)
它返回 nil 或该块计算为真的第一个对象,结束对该对象的遍历。
我必须自己写吗? Array 中所有其他很棒的方法让我觉得它就在那里,我只是没有看到它。
【问题讨论】:
标签: ruby arrays performance find