在Ruby中逐步迭代一对哈希的最佳方法是什么?我应该将它们转换为数组吗?我应该走一个完全不同的方向吗?我正在研究一个问题,在这个问题中,代码应该确定烘焙的内容,以及给出2个输入的面包店的数量。要喂的人数和他们最喜欢的食物。他们烘焙3件事(my_list中的键),每个烘焙的物品都会提供一定数量的人(my_list中的值)。
def bakery_num(num_of_people, fav_food)
my_list = {"pie" => 8, "cake" => 6, "cookie" => 1}
bake_qty = {"pie_qty" => 0, "cake_qty" => 0, "cookie_qty" => 0}
if my_list.has_key?(fav_food) == false
raise ArgumentError.new("You can't make that food")
end
index = my_list.key_at(fav_food)
until num_of_people == 0
bake_qty[index] = (num_of_people / my_list[index])
num_of_people = num_of_people - bake_qty[index]
index += 1
end
return "You need to make #{pie_qty} pie(s), #{cake_qty} cake(s), and #{cookie_qty} cookie(s)."
end
目标是输出面包店的清单,这将导致没有未吃的食物。在进行数学运算时,模数将被分成下一个食物项目。
感谢您的帮助。
答案 0 :(得分:1)
在Ruby中逐步迭代一对哈希的最佳方法是什么?
由于bake_qty
的密钥可以方便地从'_qty'
中的相应密钥添加my_list
,因此您可以利用此功能:
max_value = my_list[fav_food]
my_list.each do |key,value|
next if max_value < value
qty = bake_qty[key+'_qty']
...
end
答案 1 :(得分:0)
您可以使用“inject”方法。
until num_of_people == 0
num_of_people = my_list.inject(num_of_people) do |t,(k,v)|
if num_of_people > 0
bake_qty["#{key}_qty"] += num_of_people/v
t - v
end
end
您可以在开始时sort your hash确保您的第一份食物是最喜欢的食物