如何用从值创建并按值分组的键创建散列对象?
cars = [{
id: 1,
properties: {
name: "audi",
type: "petrol"
},
},{
id: 1,
properties: {
name: "ford",
type: "petrol"
}
},{
id: 1,
properties: {
name: "tesla",
type: "electric"
}
}]
预期效果:
{
petrol: [{name: "audi"}, {name: "ford"}],
electric: [{name: "tesla"}]
}
我当前的函数提供了所需的效果,但它太长了,如何用较短的代码获得相同的效果?
cars.map { |c| Hash[c[:properties][:type], c[:properties][:name]] }.group_by{|h| h.keys.first}.each_value{|a| a.map!{|h| h.values.first}}
最佳答案
我想出了这样的办法。应将grouped_cars
变量提取到单独的方法中。
grouped_cars = cars.inject({}) do |result, car|
result[car[:properties][:type]] ||= []
result[car[:properties][:type]] << { name: car[:properties][:name] }
result
end
{ cars: grouped_cars }