Получение данных из массива хэшей в ruby - PullRequest
0 голосов
/ 08 декабря 2018

Я получаю массив хешей из листа Google, он выглядит следующим образом

itemList = [ {:id => '1', :type => 'A', :category => 'Cat1' }, 
             {:id => '2', :type => 'A', :category => 'Cat1' },
             {:id => '3', :type => 'B', :category => 'Cat1' },
             {:id => '4', :type => 'B', :category => 'Cat1' },
             {:id => '1', :type => 'A', :category => 'Cat2' },
             {:id => '2', :type => 'A', :category => 'Cat2' },
             {:id => '3', :type => 'C', :category => 'Cat2' } ]

Я хотел бы иметь возможность распечатать это на терминале

Cat1
A
1, 2
B
3, 4

Cat2
A
1, 2
C
3

Есть липростой способ сделать это?Спасибо

1 Ответ

0 голосов
/ 08 декабря 2018

Ниже приведен необходимый вам формат,

items = itemList.group_by {|x| x[:category] }

val = items.inject({}) do |m,(k,v)|
    tmp = v.group_by { |x| x[:type] }
    m[k] = tmp.update(tmp) { |i,j| j.map { |x| x[:id] } }
    m
end

# => {"Cat1"=>{"A"=>["1", "2"], "B"=>["3", "4"]}, "Cat2"=>{"A"=>["1", "2"], "C"=>["3"]}}

Отобразите его, как показано ниже,

 val.each { |k,v| puts k; v.each { |i,j| puts i; puts j.join(', ') }; puts }

Cat1
A
1, 2
B
3, 4

Cat2
A
1, 2
C
3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...