我有一个数组@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。
答案 0 :(得分:2)
将attr_reader
添加到items
和tier
。然后像这样
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