2009-07-07 133 views
0

我有一個問題圍繞着我的腦袋。我目前正在使用黑客版本的Gruff以容納「Scatter Plots」。這就是說,數據的形式進入:(Rails)從數據集創建多維哈希/數組...?

g.data("Person1",[12,32,34,55,23],[323,43,23,43,22]) 

...其中第一個項目是實體,第二項是X-COORDS,第三項爲Y-COORDS。

我目前有一個列的項目的記錄集與列:POINT,VALUE,TIMESTAMP。由於涉及「複雜」計算,我必須使用單個查詢來抓取所有內容,否則風險會過大。也就是說,我有一個項目列表,我需要動態地從記錄集中將所有數據收集到一個用於創建數據項目的散列(或數組數組)中。我想類似如下:

@h={} 

e = Events.find_by_sql(my_query) 
e.each do |event| 
     @h["#{event.Point}"][x] = event.timestamp 
     @h["#{event.Point}"][y] = event.value 
end 

顯然,這不是正確的語法,但是這就是我的大腦是怎麼回事。有人可以幫我清理一下,或者建議一個更合適的機制來完成這個工作嗎?基本上,主要目標是保持每個點名稱的數據分組(但記住記錄集有它們全部)。

非常感謝。

編輯1

g = Gruff::Scatter.new("600x350") 
g.title = self.name 

e = Event.find_by_sql(@sql) 

h ={} 

e.each do |event| 
    h[event.Point.to_s] ||= {} 
    h[event.Point.to_s].merge!({event.Timestamp.to_i,event.Value}) 
end 

h.each do |p| 

    logger.info p[1].values.inspect 

    g.data(p[0],p[1].keys,p[1].values) 
end 

g.write(@chart_file) 

回答

0

首先,不要用串插在一個簡單的o.to_s會做。

@h[event.Point.to_s] 

您的數據結構不清楚從描述中。我認爲你的意思是1)有點名的事件2)每個事件都有時間和價值3)你想操縱一系列事件。

散列是該問題的最佳選擇。

+0

良好的插值調用。也就是說,我仍然不確定如何構建哈希。我需要每個X和Y叉,對嗎?或者它會是一個哈希散列?你介意提供一個例子嗎?我的主要問題是,所有點都在返回的記錄集中,我需要額外的「感知」級別來確定我目前使用的POINTNAME - 除非哈希支持某種「推送」機制,我可以簡單地通過名稱引用它並拋出兩個更多的值。 – 2009-07-07 17:41:39