嗨,我从数据库中获取数据以创建一些图表。我正在回复~6000 +条目,所有条目都与Type, Data, Month
相关联。我想将这些全部组合成一个数据结构,以便我可以利用没有重复键的哈希性质
合并数据。
示例:我的输出类似..
'Component', 4.1167, 'June'
'Component', 3.2167, 'June'
'Component', 4.8667, 'June'
'Component', 3.3833, 'June'
我想制作一个看起来像这样的嵌套哈希:
{'Component' => {'June' => '15.5834'}} #where all of the data gets added
数据作为3个并行数组返回到我的程序。
这样我就可以遍历所有数据,累积它并允许哈希的性质去除我的标签的重复项。
这有可能吗?
由于 亨特
答案 0 :(得分:2)
根据您从数据库中获取数据的方式,您将看到类似于此的内容......
my_hash = {}
a1, a2, a3 = get_database_result #whatever you call here
a1.each_with_index do |component,i|
month = a3[i]
val = a2[i]
month_hash = my_hash[component] #get the month has for the component
if month_hash.nil? #if it doesn't exist, create it
month_hash = {}
my_hash[component] = month_hash
end
num_val = month_hash[month].nil? ? 0 : month_hash[month] #find the existing numeric value or create a zero
num_val += val #increment by database value
month_hash[month] = num_val #insert the value
end
my_hash #return my_hash
答案 1 :(得分:2)
如果您的单个订单项本身就是类似哈希的对象,并且它们是ActiveRecord实例,那么下面的代码会将它们合并到您想要的最终哈希值中。这是一个独立的例子。
@result = {}
def f x
@result.merge!({ x[:c] => { x[:m] => x[:v] }}) do |k, o, n|
o.merge!(n) do |k, o, n|
o + n
end
end
end
f :c => 'Component', :v => 4.1167, :m => 'June'
f :c => 'Component', :v => 3.2167, :m => 'June'
f :c => 'Component', :v => 4.8667, :m => 'June'
f :c => 'Component', :v => 3.3833, :m => 'June'
p @result
更新:啊哈,并行数组?好吧,您可以将合并调用更改为:
f :c => components[i], :v => values[i], :m => months[i]