很抱歉问,但我有点挣扎。基本上我有以下功能:
weekly_reach_data = weekly_reach_arr.map do |data| [
{
name: "DCable",
data: {x: data['Graph numerics'].to_i, y: data['DCable'].to_f}
},
{
name: "DSat",
data: {x: data['Graph numerics'].to_i, y: data['DSat'].to_f}
},
{
name: "DTT",
data: {x: data['Graph numerics'].to_i, y: data['DTT'].to_f}
}
]
end
以这种形式输出数据:
{:name=>"DCable", :data=>{:x=>1, :y=>1.8}}
{:name=>"DSat", :data=>{:x=>1, :y=>7.48}}
{:name=>"DTT", :data=>{:x=>1, :y=>5.81}}
{:name=>"DCable", :data=>{:x=>2, :y=>2.29}}
{:name=>"DSat", :data=>{:x=>2, :y=>7.74}}
{:name=>"DTT", :data=>{:x=>2, :y=>5.82}} etc
但是,我要求数据采用以下格式:
{:name=>"DCable", :data=>[{:x=>1, :y=>2}, {:x=>2, :y=>3}]}
{:name=>"DSat", :data=>[{:x=>1, :y=>5}, {:x=>2, :y=>8}]}
{:name=>"DTT", :data=>[{:x=>1, :y=>3}, {:x=>2, :y=>9}]}
如您所见,前者是循环并创建多个条目。有谁知道如何重建地图函数以这种形式输出?
Weekly_reach_arr是这种形式的数组:
{"Graph numerics"=>"1", "Users"=>"S", "All platforms"=>"14.99", "DSat"=>"7.48", "DTT"=>"5.81", "DCable"=>"1.80", "% Reach"=>"S", "Target"=>"33.33%"}
{"Graph numerics"=>"2", "Users"=>"O", "All platforms"=>"15.60", "DSat"=>"7.74", "DTT"=>"5.82", "DCable"=>"2.29", "% Reach"=>"O", "Target"=>"33.33%"}
{"Graph numerics"=>"3", "Users"=>"N", "All platforms"=>"16.83", "DSat"=>"7.78", "DTT"=>"6.65", "DCable"=>"2.52", "% Reach"=>"N", "Target"=>"33.33%"}
{"Graph numerics"=>"4", "Users"=>"D", "All platforms"=>"16.27", "DSat"=>"7.64", "DTT"=>"7.01", "DCable"=>"1.68", "% Reach"=>"D", "Target"=>"33.33%"}... etc
答案 0 :(得分:3)
进行了一些编辑,但我认为以下是最简洁的版本:
%w{DCable DSat DTT}.map do |name|
weekly_reach_arr.each_with_object({name: name, data: []}) do |data, hash|
hash[:data] << {x: data['Graph numerics'].to_i, y: data[name].to_f}
end
end
答案 1 :(得分:0)
您可能会略微压扁生成的字典并使用
result = Hash.new { |h,k| h[k] = [] }
weekly_reach_arr.each do |data|
%w(DSat DTT DCable).each do |key|
result[key] << { x: data["Graph numerics"].to_i, y: data[key].to_f }
end
end
会给出
{"DSat"=>
[{:x=>1, :y=>7.48},
{:x=>2, :y=>7.74},
{:x=>3, :y=>7.78},
{:x=>4, :y=>7.64}],
"DTT"=>
[{:x=>1, :y=>5.81},
{:x=>2, :y=>5.82},
{:x=>3, :y=>6.65},
{:x=>4, :y=>7.01}],
"DCable"=>
[{:x=>1, :y=>1.80},
{:x=>2, :y=>2.29},
{:x=>3, :y=>2.52},
{:x=>4, :y=>1.68}]}
您可以随时map
使用
result.map { |key, value|
{ name: key, data: value }
}
给出了
{:name=>"DSat", :data=>[{:x=>1, :y=>7.48}, {:x=>2, :y=>7.74}, {:x=>3, :y=>7.78}, {:x=>4, :y=>7.64}]}
{:name=>"DTT", :data=>[{:x=>1, :y=>5.81}, {:x=>2, :y=>5.82}, {:x=>3, :y=>6.65}, {:x=>4, :y=>7.01}]}
{:name=>"DCable", :data=>[{:x=>1, :y=>1.8}, {:x=>2, :y=>2.29}, {:x=>3, :y=>2.52}, {:x=>4, :y=>1.68}]}