ruby - 迭代以在数组中生成散列
问题描述
所以我知道如何迭代并在哈希中创建数组
travel=["Round Trip Ticket Price:", "Price of Accommodation:", "Number of checked bags:"]
(1..3).each_with_object({}) do |trip, travels|
puts "Please input the following for trip # #{trip}"
travels["trip #{trip}"]= travel.map { |q| print q; gets.chomp.to_f }
end
==>{"trip 1"=>[100.0, 50.0, 1.0], "trip 2"=>[200.0, 100.0, 2.0], "trip 3"=>[300.0, 150.0,
3.0]}
但相反,我想迭代以在一个数组中创建三个单独的散列。我希望它看起来像这样
travels=[{trip_transportation: 100.0, trip_accommodation:50.0, trip_bags:50}
{trip_transportation:200.0, trip_accommodation:100.0, trip_2_bags:100}
{trip_3_transportation:300.0, trip_accommodation:150.0, trip_3_bags:150}]
我真的很困惑,基本上我唯一想知道的就是如何在使用循环时制作三个单独的哈希值。我希望每个哈希都代表一次旅行。这甚至可能吗?
解决方案
travel=[{ prompt: "Round Trip Ticket Price: ",
key: :trip_transportation, type: :float },
{ prompt: "Price of Accommodation : ",
key: :trip_accommodation, type: :float },
{ prompt: "Number of checked bags : ",
key: :trip_bags, type: :int }]
nbr_trips = 3
假设在运行以下代码时,用户将输入问题示例中给出的值。
(1..nbr_trips).map do |trip|
puts "Please input the following for trip #{trip}"
travel.map do |h|
print h[:prompt]
s = gets
[h[:key], h[:type] == :float ? s.to_f : s.to_i]
end.to_h
end
#=> [{:trip_transportation=>100.0, :trip_accommodation=>50.0, :trip_bags=>1},
# {:trip_transportation=>200.0, :trip_accommodation=>100.0, :trip_bags=>2},
# {:trip_transportation=>300.0, :trip_accommodation=>150.0, :trip_bags=>3}]
我认为键没有理由为不同的行程使用不同的名称(例如,:trip_2_bags
和trip_3_bags
,而不是简单地trip_bags
用于所有行程)。
推荐阅读
- nginx - 如何在反向代理后面强制使用 gzip?
- dart - NumberFormat 未找到颤振
- java - 在运行时更改 JFreeChart X & Y 轴标签
- java - CPU 是否会在因 IO 读/写而阻塞的 Java 线程上浪费时间?
- excel - 创建 Excel 数据透视表以在多列中仅包含具有非空值的行
- sql - 合并多个表中的行
- node.js - nodeJs - 使用 Unirest 发布带有表单数据的请求
- android - 为什么 WebView.evaluateJavascript() 会删除转义字符?
- javascript - 我的表单电子邮件输入有什么错误。提交时总是返回false
- java - 如何使用 Struts 2 从 JSP 页面中的数据库中选择日期数据类型