2017-01-23 148 views
0

我想两个散列合并成一个阵列中的这样一种方式,可以让他们在这样的表合并两个散列,并将它们组合我只能将数组排列为这种格式: [{“动机”=> 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 

标题和费率是来自用户的输入,所以我不知道如何按键组合值。

在我看来,我有这样的:

<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> 

谁能帮助我吗?

+0

都将条目总是按键相同的长度? –

+0

是,两个条目具有相同的密钥长度,只有值的数量可以因每个密钥而异。 –

+0

对不起,我不明白你的意思。 “每个键的值的数量可能会有所不同。” ? –

回答

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 %> 
+0

还有一件事,如果我得到可变数量的值,我应该怎么做。我的意思是,在这种情况下,我只为每个键添加两个值,所以我可以直接从self_cc中添加自身值,而从other_cc中直接添加其他值,但是如果值的数量不同,我可以这样做吗? –

+0

只是模型的一部分 –

0

这已经回答了here

改写你的问题的情况下一样,看起来是这样的:

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