MST

星途 面试题库

面试题:Ruby数组与哈希在复杂业务场景下的综合运用

假设你正在开发一个电商系统,有一个商品数组`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 }`,表示不同类别商品的折扣率。请编写代码计算每个商品的折扣后价格,并按类别分组展示,同时需要处理可能出现的类别在促销哈希中不存在的情况,要求代码具备良好的扩展性和可读性。
45.4万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
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

解释:

  1. 初始化一个空的 result 哈希,用于存储按类别分组的折扣后商品信息。
  2. 遍历 products 数组,获取每个商品的类别、价格,并从 promotions 哈希中获取对应的折扣率。如果类别在 promotions 中不存在,使用折扣率 0。
  3. 计算每个商品的折扣后价格。
  4. 根据商品类别将折扣后商品信息存储到 result 哈希中。
  5. 最后遍历 result 哈希,按类别展示每个商品的名称和折扣后价格。

此代码具有良好的扩展性,因为添加新的商品类别或促销规则时,只需在 promotions 哈希中添加相应的键值对,而不需要修改核心逻辑。同时,代码结构清晰,具有较好的可读性。