我希望在highcharts图中绘制多个系列图。我有以下两个变量
first = {5 => [dates in here], 6 => [dates in here], etc}
second = {4 => [dates in here], 5 => [dates in here], etc}
键是与月份相关的数字(4月,4月,5月,5月等)
我遇到的问题是两个哈希值可能并不总是具有相同的月份。因此,当我绘制数据时,第一个[5]绘制在第二个[4]旁边,第一个[6]绘制在第二个[5]旁边等等。
如何标准化这两个变量,使它们始终包含相同的键,即使它看起来像这样:
first = {4 => [no data], 5 => [dates in here], 6 => [dates in here], etc}
second = {4 => [dates in here], 5 => [dates in here], 6 => [no data], etc}
答案 0 :(得分:1)
first_keys = first.keys
second_keys = second.keys
keys = first_keys + second_keys
keys.uniq.each do |key|
first[key] = [] if first[key].nil?
second[key] = [] if second[key].nil?
end
答案 1 :(得分:1)
有很多方法可以做到这一点,因为它是相当开放的,但你可以从两个哈希中创建一个公共keys
数组,并迭代将nil
分配给该{的哈希值{1}}。我会特意这样做
key
答案 2 :(得分:0)
当您绘制数据时,大概是x轴上的月份和y轴上的天数,我认为最方便的是迭代几个月的时间来提供最小的密钥覆盖(几个月) )包含在两个哈希中。
data = [{ 5=>[3, 5, 11, 24], 6=>[1, 7, 13, 30], 2=>[4, 13, 18, 29] },
{ 4=>[6, 9, 19, 26], 5=>[4, 8, 11, 22], 1=>[1, 19, 22, 24] }]
month_range = Range.new(*data.reduce([]) { |arr, h| arr | h.keys }.minmax)
#=> 1..6
请注意
a = data.reduce([]) { |arr, h| arr | h.keys }
#=> [5, 6, 2, 4, 1]
b = a.minmax
#=> [1, 6]
Range.new(*b)
#=> Range.new(*[1, 6]) => Range.new(1, 6) => 1..6
我将输入表示为任意数组的哈希值,如果有两个以上的话。
对于图表,只需迭代month_range
,然后每个月m
迭代h
(哈希)data
所拥有的元素h
键m
,并在h[m]
中绘制天数(如果有的话)(不是"没有数据")。
month_range.each do |m|
data.each do |h|
<plot h[m]> if h.has_key?(m) && h[m].any?
end
end