首页 > 解决方案 > Ruby - 将对象映射到一个具有固定键的数组的最佳方法

问题描述

我尝试将一些对象合并到一个数组中

我确实输出了

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"}]

标签: jsonruby

解决方案


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"}}]

推荐阅读