我有一个具有键属性和值属性的对象列表。
我想将其转换为包含名为带键值的属性的对象。
示例将使其更清晰......
这个
[{
:key => "key1",
:value => "value1"
}, {
:key => "key2",
:value => "value2"
}]
应该是这样的:
{
:key1 => "value1"
:key2 => "value2"
}
我确定有一条线可以实现 感谢
答案 0 :(得分:4)
a = [{
:key => "key1",
:value => "value1"
}, {
:key => "key2",
:value => "value2"
}]
Hash[a.map { |h| [h[:key], h[:value]] }]
# => {"key1"=>"value1", "key2"=>"value2"}
Hash[a.map { |h| h.values_at(:key, :value) }]
# => {"key1"=>"value1", "key2"=>"value2"}
Hash[a.map { |h| [h[:key].to_sym, h[:value]] }]
# => {:key1=>"value1", :key2=>"value2"}
a.each_with_object({}) {|h,g| g.update({h[:key].to_sym => h[:value]}) }
# => {:key1=>"value1", :key2=>"value2"}
答案 1 :(得分:1)
Hash[array.map(&:values)]
#=> {"key1"=>"value1", "key2"=>"value2"}
答案 2 :(得分:1)
只是为了推广to_h
:
[{
:key => "key1",
:value => "value1"
}, {
:key => "key2",
:value => "value2"
}].map(&:values).map{|k,v| [k.to_sym,v]}.to_h
# => {:key1=>"value1", :key2=>"value2"}