我試圖將一對數據結構中包含的數據轉換爲與HighCharts(一個JS圖表庫)兼容的格式。通過解析JSON文件來填充初始數據結構。 (I不能改變該步驟,而必須與所得到的數據結構的工作)的初始數據結構是這樣的:紅寶石 - 更改信息數據結構 - 陣列/哈希
初始化:
@areaBreakdown = Hash.new { |hash, key| hash[key] = Hash.new }
@deptBreakdown = Hash.new { |hash, key| hash[key] = Hash.new }
示例數據@areaBreakdown:
{#<Area id: 1, area_code: "123", created_at: "2014-04-04 20:23:11",
updated_at: "2014-04-04 20:23:11", name: "testarea1",
org_code: "123456">=>{"areaScore"=>46.65},
#<Area id: 2, area_code: "456", created_at: "2014-04-04 20:23:11",
updated_at: "2014-04-04 20:23:11", name: "testarea2",
org_code: "123456">=>{"areaScore"=>52.98}}
樣品數據@deptBreakdown:
{#<Dept id: 1, dept_code: "78910", created_at: "2014-04-04 20:23:11",
updated_at: "2014-04-04 20:23:11", name: "testdeptunderarea1",
area_id: 1>=>{"deptScore"=>46.65},
#<Dept id: 2, dept_code: "4567", created_at: "2014-04-04 20:23:11",
updated_at: "2014-04-04 20:23:11", name: "testdept1underarea2",
area_id: 2>=>{"deptScore"=>49.81},
#<Dept id: 3, dept_code: "99999", created_at: "2014-04-04 20:23:11",
updated_at: "2014-04-04 20:23:11", name: "testdept2underarea2",
area_id: 2>=>{"deptScore"=>56.15}}
Highchart對於我正在嘗試構建的圖表採用兩個單獨的數據結構。 areaBreakdown必須轉換爲散列數組,每個索引對應不同的區域。陣列名稱爲areaScores。 areaScores的
硬編碼版本:
@hardCodedAreaScores = Array.new
# Push a Hash onto the array
@hardCodedAreaScores.push Hash.new
# Access the newly pushed hash by giving it a key, value pair to add
@hardCodedAreaScores[0]["name"] = "area1"
# Do it again
@hardCodedAreaScores[0]["drilldown"] = "area1"
# And again
@hardCodedAreaScores[0]["y"] = 35.15
@hardCodedAreaScores.push Hash.new
@hardCodedAreaScores[1]["name"] = "area2"
@hardCodedAreaScores[1]["drilldown"] = "area2"
@hardCodedAreaScores[1]["y"] = 45.59
@deptBreakdown,deptScores的轉化應該是散列的陣列。每個散列應該有3個鍵:「名稱」,「ID」和「數據」。 「name」=「id」=「深入」。數據是一個數組數組,它保存要顯示的圖表的數據點。例如,「data」= [[x1,y1],[x2,y2]]。
deptScores的硬編碼的實施例:
@hardCodedDepartmentScores = Array.new
@hardCodedDepartmentScores.push Hash.new
@hardCodedDepartmentScores[0]["name"] = "area1"
@hardCodedDepartmentScores[0]["id"] = "area1"
@hardCodedDepartmentScores[0]["data"] = Array.new
@hardCodedDepartmentScores[0]["data"][0] = Array.new
@hardCodedDepartmentScores[0]["data"][0].push "Department1UnderArea1"
@hardCodedDepartmentScores[0]["data"][0].push 20.15
@hardCodedDepartmentScores[0]["data"].push Array.new
@hardCodedDepartmentScores[0]["data"][1].push "Department2UnderArea1"
@hardCodedDepartmentScores[0]["data"][1].push 69.69
@hardCodedDepartmentScores.push Hash.new
@hardCodedDepartmentScores[1]["name"] = "area2"
@hardCodedDepartmentScores[1]["id"] = "area2"
@hardCodedDepartmentScores[1]["data"] = Array.new
@hardCodedDepartmentScores[1]["data"][0] = Array.new
@hardCodedDepartmentScores[1]["data"][0].push "Department1UnderArea2"
@hardCodedDepartmentScores[1]["data"][0].push 98.21
@hardCodedDepartmentScores[1]["data"].push Array.new
@hardCodedDepartmentScores[1]["data"][1].push "Department2UnderArea2"
@hardCodedDepartmentScores[1]["data"][1].push 12.34
我嘗試:
def cycleThroughProcessedDataAndCreateHighChartsDataSetsBreakdown(areaBreakdown, deptBreakdown, employBreakdown)
areaScores = Array.new
areaScores.push Hash.new
deptScores = Array.new
deptScores.push Hash.new
counter = 0
deptCounter = 0
areaCounter = 0
areaBreakdown.each_key do |area|
areaScores.push Hash.new
areaScores[counter]["name"] = areaBreakdown[area]["name"]
areaScores[counter]["drilldown"] = areaBreakdown[area]["name"]
areaScores[counter]["areaScore"] = areaBreakdown[area]["areaScore"]
deptScores.push Hash.new
deptScores[areaCounter]["name"] = areaBreakdown[area]["name"]
deptScores[areaCounter]["id"] = areaBreakdown[area]["name"]
deptBreakdown.each_key do |dept|
if deptScores[counter]["area_id"] == areaBreakdown[area]["area_id"]
deptScores[counter]["data"] = Array.new
deptScores[counter]["data"][deptCounter] = Array.new
deptScores[counter]["data"][deptCounter].push deptBreakdown[dept]["name"]
deptScores[counter]["data"][deptCounter].push deptBreakdown[dept]["deptScore"]
deptCounter += 1
end
#areaCounter += 1
end
counter += 1
end
debugger
return deptScores, areaScores
end
我的問題是如何正確地兩個初始數據結構(或兩個硬編碼版本)轉換爲所需的數據結構。我對ruby有點新,而且我無法訪問某些信息,比如name和id。在嘗試迭代並填寫各種數據結構時,我也遇到了大量空方法錯誤。迭代必須發生,因爲@areaBreakdown和@deptBreakdown的大小是動態的。如何正確填寫兩個數據結構@areaScores和@deptScores?
謝謝, 馬特
附:我爲這篇長文發表道歉。任何幫助表示讚賞。如果問題不明確,將提供更多細節。
電流輸出:
(rdb:1) areaScores
[{"name"=>nil, "drilldown"=>nil, "areaScore"=>46.65}, {"name"=>nil, "drilldown"=>nil, "areaScore"=>52.98}]
(rdb:1) deptScores
[{"name"=>nil, "id"=>nil, "data"=>[nil, nil, [nil, 56.15]]}, {"data"=>[nil, nil, nil, nil, nil, [nil, 56.15]]}, {}]
你確定'@ areaBreakdown'和'@ deptBreakdown'是散列嗎?它們看起來更像是基於該可視化的對象數組。另外,你可以發佈你收到的錯誤/錯誤嗎? – Doydle
@Doydle這是他們如何被初始化是不是他們(哈希)?目前沒有任何錯誤,但輸出不完整且不正確。我已經更新了我的嘗試,並且包含了areaScores和deptscores的當前輸出。輸出包含在問題的底部。我仍然不確定爲什麼「名稱」在areaScores中以「零」出現。 deptscores的數據結構也是關閉的,與areaScores類似,「name」和「id」等字段沒有被填充。是否有更多信息可以提供給您? –