我有点问题缠绕着什么东西。我目前正在使用一个黑客版本的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
显然这不是正确的语法,但这就是我的大脑所在。有人可以为我清理这个或建议一个更合适的机制来实现这一目标吗?基本上,主要目标是保持每个点名的数据分组(但请记住记录集全部都有)。
非常感谢。
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 :(得分:0)
首先,当简单的o.to_s执行时,不要使用字符串插值。
@h[event.Point.to_s]
从描述中不清楚数据的结构。我认为你的意思是1)有点名称的事件2)每个事件都有一个时间和值3)你想要操纵一组事件。
哈希是问题的不错选择。