2013-05-15 39 views
0

我有一些代碼需要一個CSV文件。我試圖在Ruby中使用這些信息來創建圖表rChart操作rChart的哈希數據 - Ruby

在我的代碼我有CSV文件加載到一個哈希像下面這樣:

CSV.new(open(url),:headers => true, :header_converters => :symbol, :converters => :all).each do |line| 
    title = line.headers[0] 
    points[line.fields[0]] = Hash[line.headers[1..-1].zip(line.fields[1..-1])] 
end 

後來......

points.keys.sort.each do |key| 
    puts "---" # added for clarification in SO example of each key 
    points[key].each {|serie_name, point| puts "#{serie_name} = #{point}"} 
    puts points[key].length # total number of series 
end 

輸出:

--- 
wmt_oracle = 68 
irt_oracle = 44 
wmt_sql = 20 
irt_sql = 11 
operations = 4 
5 
--- 
wmt_oracle = 23 
irt_oracle = 44 
wmt_sql = 160 
irt_sql = 8 
operations = 3 
5 
--- 
wmt_oracle = 66 
irt_oracle = 224 
wmt_sql = 48 
irt_sql = 15 
operations = 3 
5 

在rChart的數據點堆疊的條形圖以下列方式添加:

data.add_point([9,9,9,10,10,11,12,14,16,17,18,18,19,19,18,15,12,10,9],"Serie1"); 
data.add_point([10,11,11,12,12,13,14,15,17,19,22,24,23,23,22,20,18,16,14],"Serie2"); 
data.add_point([4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22],"Serie3"); 
. . . 

因爲我需要讓我的數據上面的數據是這樣的:

data.add_point([68,23,66],"wmt_oracle"); 
data.add_point([44,44,224], "irt_oracle") 
data.add_point([20,160,48], "wmt_sql") 
data.add_point([11,8,15], "irt_sql") 
data.add_point([4,3,3], "operations") 

這將是在格式data.add_point(array_of_points, serie_name)

我怎樣才能獲得的數據進行散列的這個格式?

+0

不清楚!你有什麼和你想要什麼,讓我們知道。請明確點。 –

+0

我會盡力解決它,但什麼不明確? –

回答

1

我認爲這是你在找什麼:

# Hash with default value [] 
transformed = Hash.new { |hash,key| hash[key] = [] } 
points.each { |k,v| v.each { |name,count| transformed[name] << count } } 

現在transformed將是{"wmt_oracle" => [68,23,66], "irt_oracle" => [44,44,224], ...}

然後加點:

transformed.each { |name, values| data.add_point(values, name) } 
+0

是的。非常感謝! –