确定具有匹配属性的对象是否大于ruby数组中的变量?

时间:2017-04-20 13:33:39

标签: arrays ruby

我有一个数组@items,名为Items的ruby对象,用户购买。 项目具有属性“层”,可以等于1,2或3。

class Item
 def initialize(attributes)
  @price = attributes[:price]
  @tier = attributes[:tier]
 end 
end

class Order
  def initialize
    @items = []
  end

  def receive_gift?
    #number of Items with same tier attribute >= 5
  end
end

当阵列中存在同一层的5个Item对象时,用户可以收到免费礼物。 我的receive_gift怎么样?方法检查是否有5个或更多具有相同层的给定项目。这不是rails,所以我没有使用DB。

1 个答案:

答案 0 :(得分:2)

attr_reader添加到itemstier。然后像这样

def receive_gift?
  items.group_by(&:tier).any? { |tier, items| items.size >= 5 }
end

或类似的

def receive_gift?
  items.group_by(&:tier).values.any? { |items| items.size >= 5 }
end

def receive_gift?
  items.group_by(&:tier).values.map(&:size).max >= 5
end

哪些层次满足条件?

def receive_gift?
  items.group_by(&:tier).select { |tier, items| items.size >= 5 }
end