Ruby数组怎么用find_first找对象?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我有一个数组,它最多包含一个满足某种标准的对象。我想高效地找到它。我从文档那里得到的最好的想法是:

candidates = my_array.select { |e| e.satisfies_condition? }
found_it = candidates.first if !candidates.empty?

但我不满意有两个原因:(1)选择使我遍历整个数组,即使我们在第一次就命中;(2)我需要一行代码(带有条件)来平候选。这两个操作都是浪费的

有什么好方法吗?

提问于
用户回答回答于
用户回答回答于

使用数组detect方法,如果希望返回第一个值,块将返回true。

[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]

扫码关注云+社区