ruby-on-rails - 将 2 个哈希与相同的键组合
问题描述
我想组合 2 个具有相同键的哈希。
@clean_by_hour = Sale.where(item_name: clean).group_by_hour_of_day(:complete_time, format: "%-l %P").count
=> {"12 am"=>0, "1 am"=>0, "2 am"=>0, "3 am"=>0, "4 am"=>0, "5 am"=>0, "6 am"=>0, "7 am"=>0, "8 am"=>4, "9 am"=>14, "10 am"=>19, "11 am"=>10, "12 pm"=>19, "1 pm"=>16, "2 pm"=>13, "3 pm"=>18, "4 pm"=>7, "5 pm"=>4, "6 pm"=>4, "7 pm"=>0, "8 pm"=>0, "9 pm"=>0, "10 pm"=>0, "11 pm"=>0}
@lube_by_hour = Sale.where(item_name: lube).group_by_hour_of_day(:complete_time, format: "%-l %P").count
=> {"12 am"=>0, "1 am"=>0, "2 am"=>0, "3 am"=>0, "4 am"=>0, "5 am"=>0, "6 am"=>0, "7 am"=>0, "8 am"=>3, "9 am"=>4, "10 am"=>10, "11 am"=>14, "12 pm"=>10, "1 pm"=>8, "2 pm"=>5, "3 pm"=>20, "4 pm"=>4, "5 pm"=>2, "6 pm"=>0, "7 pm"=>0, "8 pm"=>0, "9 pm"=>0, "10 pm"=>0, "11 pm"=>0}
我希望新的哈希看起来像:
{"12 am"=> 0, 0}
至少这是我认为我想要的。我正在尝试组合这 2 个哈希,以便可以在表格中显示数据。
我知道我需要更改此代码,但这是我现在在视图中使用的内容。
<% @clean_by_hour.each do |hour, count| %>
<% if count != 0 %>
<tr>
<td><%= hour %></td>
<td><%= count %></td>
<% end %>
<% end %>
<% @lube_by_hour.each do |hour, count| %>
<% if count != 0 %>
<td><%= count %></td>
<% end %>
<% end %>
</tr>
谢谢!
解决方案
你可以用#each_with_object
这个。不确定这是否是最好的方法,但它可以让你得到你想要的。
@clean_by_hour.each_with_object({}) do |(k,v), acc|
acc[k] ||= []
acc[k] << v
acc[k] << @lube_by_hour[k]
acc[k].compact
end
将返回{'12 am' => [0,0], '1 am' => [0,0], ... }
推荐阅读
- html - HTML - Flexbox 元素在中心独立于其他元素对齐,同时保持其填充
- microcontroller - USART和SPI通信有什么区别?
- kotlin - 创建一个使用递归在 kotlin 中生成所有字符串排列的方法
- python - 如何使用 Python 中的大量列表字典来扩展操作?
- oracle - OCIDESCRIPTORFREE 崩溃而不是返回 OCI_INVALID_HANDLE
- azure - 如何从 azure blob 容器访问/导出数据?
- python - 有什么方法可以使用 sql lite 数据库中列表中的值
- python - Python“for循环”有两个参数
- javascript - 使用过滤器渲染 html
- html - 使用css激活时更改boostrap下拉列表的背景颜色