2

我有一个对象数组,我需要找到与特定条件匹配的最后一个元素。我试着用 来做each_reverse,但结果代码太多了:

matching_item = nil

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

有没有可能让它更短?

4

3 回答 3

5

尝试:

matching_item = items.reverse.find{ |i| i.type_id == 10 }
于 2012-08-27T20:19:28.953 回答
1

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

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

.last如果您决定要所有匹配项,请省略:

matching_items = items.select {|i| i.type_id == 10}
于 2012-08-27T20:17:57.097 回答
1
items.reverse_each.detect{|item| iterm.type_id == 10}
#or
items[items.rindex{|item| item.type_id == 10}]
于 2012-08-27T20:46:43.270 回答