2017-01-23 14 views
0

Я пытаюсь объединить два хэшей в один массив таким образом, что можно показать их в таблицу, как это:Слияние двух хэшей и сгруппировать их по ключевым

enter image description here

сейчас Я могу только расположить массив таким образом: [{«Мотивация» => 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 из self_cc, а другое из other_cc, но если количество значений варьируется, кто бы я мог это сделать? –

+0

только модельная часть –

0

Это был дан ответ here:

Перефразируя то же самое в контексте вашего вопроса, в выглядит следующим образом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^