如何修改Ruby映射产生的数组映射数据结构?

时间:2012-01-11 06:08:09

标签: ruby

我相信我可能会在这里遗漏一些东西,所以请在我解释两种情景时请耐心等待,以期调和我的误解:

我的最终目标是通过Highcharts创建lazy_high_charts可接受的数据集,但是在此任务中,我发现它接收的数据格式非常特别。< / p>

A)我发现当数据格式化为这样时,它就可以很好地绘制点数:

[0.0000001240,0.0000000267,0.0000000722, ..., 0.0000000512]

我只需使用:

生成这样的数组
array = Array.new

data.each do |row|
  array.push row[:datapoint1].to_f
end

B)然而,如果我尝试使用map函数,我最终会得到一个结果,并且Highcharts无法呈现此数据:

[[6.67e-09],[4.39e-09],[2.1e-09],[2.52e-09], ..., [3.79e-09]]

来自以下代码:

array = data.map{|row| [(row.datapoint1.to_f)] }

有没有办法哄一下地图函数在B中产生的结果更类似于情景A结果数据结构?


这个问题更加复杂,因为我还必须在此添加日期时间,但这是另一个主题,我只想先了解这一点,以及可以采取哪些措施来进一步控制我要去的地方。

最终,根据此处示例中的数据, 即使情景B应该工作 http://www.highcharts.com/demo/spline-irregular-time(按下底部的“查看选项”按钮)< / p>

哎呀,如果你可以填写我的信息,我会在邮件中寄给你一个傻瓜! ;)

3 个答案:

答案 0 :(得分:2)

你可以像这样修复数组

[[6.67e-09],[4.39e-09],[2.1e-09],[2.52e-09], ..., [3.79e-09]]

通过在数组上使用flatten方法在其中嵌套数组。

但是你应该能够避免首先生成嵌套数组。只需从map行中删除方括号:

即可
array = data.map{|row| row.datapoint1.to_f }

答案 1 :(得分:1)

代码

a = [[6.67e-09],[4.39e-09],[2.1e-09],[2.52e-09], [3.79e-09]]

b = a.flatten.map{|el| "%.10f" % el }
puts b.inspect

输出

  

[“0.0000000067”,“0.0000000044”,“0.0000000021”,“0.0000000025”,“0.0000000038”]

答案 2 :(得分:1)

除非我也错过了某些东西,否则你的问题是你从块中返回一个单元素数组(从而创建一个数组数组)而不仅仅是值。这应该是你:

array = data.map {|row| row.datapoint1.to_f }
# => [ 6.67e-09, 4.39e-09, 2.1e-09, 2.52e-09, ..., 3.79e-09 ]