(Rails)从数据集创建多维哈希/数组......?

时间:2009-07-07 17:17:54

标签: ruby-on-rails hash multidimensional-array recordset

我有点问题缠绕着什么东西。我目前正在使用一个黑客版本的Gruff来容纳“Scatter Plots”。也就是说,数据以下列形式输入:

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

...第一项是ENTITY,第二项是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)

1 个答案:

答案 0 :(得分:0)

首先,当简单的o.to_s执行时,不要使用字符串插值。

@h[event.Point.to_s]

从描述中不清楚数据的结构。我认为你的意思是1)有点名称的事件2)每个事件都有一个时间和值3)你想要操纵一组事件。

哈希是问题的不错选择。