62

有没有比这更短的方法来找到满足某些条件的数组中的第一个元素:

my_array[ my_array.index {|x| x.some_test} ]
4

2 回答 2

106

试试这个:

my_array.find{|x| x.some_test }

或者这是一个捷径(感谢@LarsHaugseth 提醒)

my_array.find(&:some_test)
于 2012-11-12T07:32:59.640 回答
4

至于我觉得听起来很混乱。正如我所期望的那样,这样的请求会收到不止一个对象。

我更喜欢用它detect来获得不同的东西。

select找到所有这些。

这里 ruby​​ 文档讲述了它们:

detect(ifnone = nil) {| obj | block } → obj or nil click to toggle source 
find(ifnone = nil) {| obj | block } → obj or nil 
detect(ifnone = nil) → an_enumerator 
find(ifnone = nil) → an_enumerator

将枚举中的每个条目传递给阻塞。返回第一个不为假的块。如果没有对象匹配,则调用 ifnone 并在指定时返回其结果,否则返回 nil。

find_all {| obj | block } → array click to toggle source
select {| obj | block } → array
find_all → an_enumerator
select → an_enumerator

返回一个数组,其中包含块不为假的枚举的所有元素

于 2012-11-12T08:02:33.617 回答