2012-08-27 42 views
2

我有一个对象数组,我需要找到与特定条件匹配的最后一个元素。我试着用each_reverse做到这一点,但它结束了太多的代码:搜索数组中的特定项目

matching_item = nil 

items.reverse_each do |item| 
    if (item.type_id == 10) 
    matching_item = item 
    break 
    end 
end 

是否有可能把它缩短?

回答

1

我可能会使用Array#select并返回最后一场比赛:

matching_item = items.select {|i| i.type_id == 10}.last 

离开关.last,如果你决定要所有比赛:

matching_items = items.select {|i| i.type_id == 10} 
+0

虽然有不错的,但他们搜索所有数组,并在找到最适合的匹配元素时不停止。任何方式来这? –

5

尝试:

matching_item = items.reverse.find{ |i| i.type_id == 10 } 
1
items.reverse_each.detect{|item| iterm.type_id == 10} 
#or 
items[items.rindex{|item| item.type_id == 10}]