【问题标题】:Merge two Hashes and group them by the key合并两个 Hash 并按 key 分组
【发布时间】:2017-06-07 12:31:46
【问题描述】:

我正在尝试将两个哈希合并到一个数组中,这样可以在表格中显示它们:

现在我只能将 Array 安排成这种格式: [{"动力"=>4, "领导力"=>3, "创新"=>1}, {"领导力"=>2, "动力"=>3, "创新"=>1}]

在我的模型中,我有这个代码:

  def rates_table_index

  total = []

  ...
  ...
  slf_cc = ...

  self_cc = {}

  slf_cc.each do |cc|
    self_cc[cc.title] = cc.rate
  end

  total << self_cc

  other_cc = {}

  other_ccs = ...

  other_ccs.each do |cc|
    other_cc[cc.title] = cc.rate
  end

  total << other_cc

  result = total

end

Title 和 rate 是来自用户的输入,所以我不知道如何通过那里的键对值进行分组。

在我看来,我有这个:

<h2>Table</h2>
<table class="table">
  <thead>
  <tr>
    <th>Column 1</th>
    <th>Column 2</th>
    <th>Column 3</th>
  </tr>
  </thead>
  <tbody>

  <% @model.rates_table_index.each do |title, values| %>
          <tr>
            <td><%= title %></td>
            <td><%= values[0] %></td>
            <td><%= values[1] %></td>
          </tr>
      <% end %>
  </tbody>
</table>

谁能帮帮我?

【问题讨论】:

  • 两个条目是否总是具有相同长度的键?
  • 是的,两个条目的键长度相同,只是每个键的值的数量可以不同。
  • 对不起,我没听懂你。 “每个键的值的数量可能会有所不同。” ?
  • 对不起,糟糕的回答,是的,两个条目的键长度相同,忽略“每个键的值的数量可能不同”
  • 试试我的解决方案,让我知道它是否有效。

标签: ruby-on-rails arrays hash grouping


【解决方案1】:

创建一个以标题(“动机”、“领导力”等)为键、数组([4,3][3,2] 等)为值的哈希。

# self_cc = {"Motivation"=>4, "Leadership"=>3, "Innovation"=>1}
# other_cc = {"Leadership"=>2, "Motivation"=>3, "Innovation"=>1}

rates = {}

keys = self_cc.keys
keys.each do |k|
  rates[k] = [self_cc[k], other_cc[k]]
end

# rates
# => {"Motivation"=>[4, 3], "Leadership"=>[3, 2], "Innovation"=>[1, 1]}

通过遍历视图中的哈希来显示数据。

<% rates.each do |title, values| %>
  <tr>
    <td><%= title %></td>
    <td><%= values[0] %></td>
    <td><%= values[1] %></td>
  </tr>
<% end %>

【讨论】:

  • 还有一件事,如果我得到可变数量的值,我应该怎么做。我的意思是,在这种情况下,我只为每个键添加两个值,所以我可以直接添加 self_cc 中的 self 值和 other_cc 中的另一个值,但是如果值的数量不同,我可以这样做吗?
  • 只是模型部分
【解决方案2】:

已回复here:

在您的问题上下文中重新表述相同的内容,如下所示:

[self_cc, other_cc].reduce({}) {|h,pairs| pairs.each {|k,v| (h[k] ||= []) << v}; h}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 2023-03-14
    • 2013-01-26
    • 2012-03-21
    • 2014-02-13
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    相关资源
    最近更新 更多