检查值是否等于数组中某个对象的属性值

时间:2018-06-15 08:34:21

标签: ruby

对象FoodTypeVegetable具有属性id。有几个不同的FoodTypeVegetable s。

我想检查vegetable.id - my_vegetable_id - 是否等于被认为是蔬菜的任何`FoodType id。

我有一个包含多个FoodType s的数组:

valid_foodtypes = [Spinach, Cauliflower, Carrot]

检查给定vegetable.id是否等于id中任何对象的valid_foodtypes的最佳方式是什么?

我能做到:

my_vegatable_id = vegatable.id
valid_foodtypes.each do |foodtype|
    if foodtype.id == vegetable.id
    # Execute code, then break because once is enough
    break

有没有更好的方法,也许是一个单行,这样做?

2 个答案:

答案 0 :(得分:3)

我做

if valid_foodtypes.any? {|foodtype| foodtype.id == vegetable.id }
  # code here
end

或:

if valid_foodtypes.map(&:id).include?(vegetable.id)
  # code here
end

答案 1 :(得分:0)

如果valid_foodtypes是数组,那么

foodtype = valid_foodtypes.find{|type| type.id == vegetable.id}
# Do whatever with the found foodtype.
# Note that foodtype can be nil!!

如果是关系,那么

foodtype = valid_foodtypes.find(vegetable.id)