面试题答案
一键面试products = [
{name: 'Product A', category: 'Electronics', price: 100},
{name: 'Product B', category: 'Clothing', price: 50},
{name: 'Product C', category: 'Electronics', price: 150}
]
promotions = { 'Electronics' => 0.1, 'Clothing' => 0.05 }
# 初始化结果哈希
result = {}
products.each do |product|
category = product[:category]
price = product[:price]
discount_rate = promotions[category] || 0 # 处理类别不存在的情况
discounted_price = price * (1 - discount_rate)
if result[category].nil?
result[category] = []
end
result[category] << {name: product[:name], discounted_price: discounted_price}
end
# 展示结果
result.each do |category, products|
puts "Category: #{category}"
products.each do |product|
puts " Name: #{product[:name]}, Discounted Price: #{product[:discounted_price]}"
end
end
解释:
- 初始化一个空的
result
哈希,用于存储按类别分组的折扣后商品信息。 - 遍历
products
数组,获取每个商品的类别、价格,并从promotions
哈希中获取对应的折扣率。如果类别在promotions
中不存在,使用折扣率 0。 - 计算每个商品的折扣后价格。
- 根据商品类别将折扣后商品信息存储到
result
哈希中。 - 最后遍历
result
哈希,按类别展示每个商品的名称和折扣后价格。
此代码具有良好的扩展性,因为添加新的商品类别或促销规则时,只需在 promotions
哈希中添加相应的键值对,而不需要修改核心逻辑。同时,代码结构清晰,具有较好的可读性。