2017-01-23 191 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}