具有条件的数组的第一个元素

时间:2012-11-12 07:31:19

标签: ruby arrays

是否有更短的方法来查找满足某些条件的数组中的第一个元素:

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

2 个答案:

答案 0 :(得分:93)

试试这个:

my_array.find{|x| x.some_test }

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

my_array.find(&:some_test)

答案 1 :(得分:4)

至于我发现听起来令人困惑。因为我期待收到这样一个请求的多个对象。

我更喜欢使用detect获取不同的内容。

select用于查找所有这些内容。

这是红宝石文档讲述的内容:

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

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

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

返回一个数组,其中包含enum的所有元素,其中block不是false