2012-01-09 22 views
0

我在Rails中提取了3個數據點:data1,data2和datetime。我需要組裝這些成用於插入兩個不同的二維數組成圖形(Highcharts)如此:http://jsfiddle.net/RKVgx/如何從查詢中構建二維數組?

可以看到,該數據將最終在js中使用,如:

series: [{ 
    data: [[6, 540], [7, 540], [7, 1620], [8, 1620]] 
},{ 
    data: [[6, 340], [7, 340], [7, 620], [8, 620]] 
}] 

通過使用lazy_high_charts這是非常直接的,但我只需要適當地組成陣列輸出。我想是這樣的,但我需要在適當建立二維數組插入一些幫助:

readings = ModelName.order("date DESC").select('table_name.data1, table_name.data2, table_name.date').limit(1000).all 

# HELP HERE, Need 2D arrays here... 
data2_and_time_array = Array.new 
data1_and_time_array = Array.new 

readings.each do |row| 
    # HELP HERE, build place datetime into each for X axis 
    data1_and_time_array.push row[:date] 
    data2_and_time_array.push row[:date] 

    # These are the Y data points in each series 
    data1_and_time_array.push row[:data2].to_f 
    data2_and_time_array.push row[:data1].to_f 

end 


f.series(
    :name => 'Data1', 
    # Date is X & must be first in each 2D array, I believe 
    # in format of: [[X1, Y1], [X2, Y2], ... [Xn, Yn]] 
    :data => data1_and_time_array 
) 
f.series(
    :name => 'Data2', 
    :data => data2_and_time_array 
) 

如果你能提供相應的修復程序/邏輯做到這一點正確的示例代碼上面,我非常感謝。

+0

輸入數據中的細節太多。簡單地給出一個示例輸入(Ruby對象),不需要太多的工作,以及你想要的輸出(你已經這麼做了)。 – tokland 2012-01-09 08:25:53

回答

0

不知道我非常理解你想要什麼,但map應該做的伎倆:

data2_and_time_array = readings.map{|row| [row.date, row.data1.to_f] } 
data1_and_time_array = readings.map{|row| [row.date, row.data2.to_f] } 

編輯:

可以執行你想要的塊內的任何處理:

data2_and_time_array = readings.map do{|row| [row.date, row.data1 == -1 ? row.data1.to_f : nil] } 

當進行復雜的處理時,鼓勵使用do...end塊合成x代表更易讀的代碼:

data2_and_time_array = readings.map do |row| 
    date, data = row.date, row.data1 
    data = (data == -1) ? nil : data.to_f 
    [date, data] 
end 
+0

除此之外,如果'row.data1 == -1'的某個值,那麼它應該將一個零值壓入堆棧,您可以簡單地在您使用的較短塊中執行該操作嗎?我假設在這一點上它將進入多線程塊。 – ylluminate 2012-01-09 17:20:51

+0

結束使用該變體:'data1_and_date_array = readings.map {| row | [row.date,(row.short.to_f if BigDecimal(row.data1)!= BigDecimal(「 - 100.0」))]}' – ylluminate 2012-01-09 21:28:43