是否有更短的方法来查找满足某些条件的数组中的第一个元素:
my_array[ my_array.index {|x| x.some_test} ]
答案 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