首页 > 解决方案 > 将 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>

谢谢!

标签: ruby-on-railsrubyruby-hash

解决方案


你可以用#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], ... }


推荐阅读