2009-07-07 19 views
0

私は何かの周りに頭を包む問題が少しあります。私は現在、「散布図」に対応するためにGruffのハッキング版を使用しています。即ち、前記データの形で入力される:最初の項目は、エンティティである(Rails)データセットから多次元ハッシュ/配列を作成する...?

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

...、2番目の項目は、X-COORDSであり、第3の項目はY-COORDSです。

私は現在、POINT、VALUE、TIMESTAMPの列を持つテーブルの項目のレコードセットを持っています。 「複雑な」計算が必要なため、私は単一のクエリを使用してすべてを取得するか、あまりにも多くのDBアクティビティを危険にさらす必要があります。つまり、データ項目の作成のために、レコードセットからすべてのデータをハッシュ(または配列の配列)に動的に収集する必要があるアイテムのリストがあります。

@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 

は明らかにそれは正しい構文ではありませんが、私の脳が起こっているところです。私は、次のようなものを考えていました。誰かが私のためにこれをきれいにするか、これを達成するためのより適切な仕組みを提案できますか?基本的な主な目的は、各ポイント名のデータをグループ化しておくことです(ただし、レコードセットにはすべてが含まれています)。

非常に高く評価されています。

EDIT 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を判断するためには、「意識」のレベルが必要です。もちろん、ハッシュは何らかの「プッシュ」メカニズムをサポートしています。私は単純にそれを名前で参照し、さらに2つの値をスローすることができます。 –

+0

データをどのように表現し整理するかを理解する必要があります。コードは二次的です。ハッシュ(イベント名でキーインされている)内のポイントを操作したいが保存しない場合は問題ありません。別のハッシュ(キー: "x"、 "y")または時間と値を参照するリスト(0th = x、1th = y)を使用することもできます。 '@ [event.Point.to_s] = [event.timestamp、event.value] ' – mcandre

+0

「編集1」をご覧ください。それが私のコメントです。どのようにデータをフォーマットするかによって、配列から文字列への変換やその逆の変換に関するエラーを受け取ります。なぜ私は単に配列の値をプラグインできないのか分かりません。おそらく、配列の1つを文字列として返すでしょうか? –