Ruby - лучший способ отобразить объекты в один массив с фиксированным ключом - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь объединить некоторый объект в один массив

Я сделал вывод

q = [["99","99","99"],["9"]]
o = [["b","1"],["c","3"],["d","1"],["c","30"]]

puts q.zip(o).map { |k,v| [*k,v] }.to_json

=> [["99",["b","1"]],["99",["c","3"]],["99",["d","1"]],["9",["c","30"]]]

Я ищу лучший способ

[{"99"=>{"b"=>"1", "c"=>"3", "d"=>"1"}},{"9"=>{"c"=>"30"}]

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Ищете что-то подобное?

some_array = [["9",["b","8"]], ["9",["c","2"]], ["9",["d","6"]]]
some_hash = some_array.each_with_object(Hash.new{ |h,k| h[k] = {} }) do |(k, (sub_key, sub_val)), hash|
  hash[k][sub_key] = sub_val
end

p some_hash

#=> {"9"=>{"b"=>"8", "c"=>"2", "d"=>"6"}} 
1 голос
/ 22 марта 2019
a = [["9",["b","8"]],["9",["c","2"]],["9",["d","6"]]]

a.group_by(&:first).transform_values{|a| a.map(&:last).to_h}
# => {"9"=>{"b"=>"8", "c"=>"2", "d"=>"6"}}

a.group_by(&:first).transform_values{|a| a.map(&:last).to_h}.map{|k, v| {k => v}}
# => [{"9"=>{"b"=>"8", "c"=>"2", "d"=>"6"}}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...