我正在使用图表数据。我有三组来自三个来源的数据,我试图将他们的年份添加到新的一起。在我的例子中,年份是0,1,2。
视觉:
data = [[[year, value], [year, value], [year, value]],
[[year, value], [year, value], [year, value]],
[[year, value], [year, value], [year, value]]]
以下是实际数据的示例:
data = [[[0, 1], [1, 2], [2, 3]],
[[0, 4], [1, 5], [2, 6]],
[[0, 7], [1, 8], [2, 9]]]
我试图获得以下结果:
data = [[0, 12], [1, 15], [2, 18]]
为了增加复杂性,它不会总是三组数据,可能是一组或十二组,任何数字。
非常感谢任何帮助。
答案 0 :(得分:4)
<强>解决方案强>:
data.map(&:to_h).reduce({}) {|memo, h| memo.merge(h) {|_,v1,v2| v1 + v2} }.to_a
<强>解释强>
步骤1:将数据数组转换为哈希数组
data_hash = data.map(&:to_h)
#=> [{0=>1, 1=>2, 2=>3}, {0=>4, 1=>5, 2=>6}, {0=>7, 1=>8, 2=>9}]
步骤2:通过将每个散列相互合并来减少散列数组,同时确保为给定键添加值。
reduced_hash = data_hash.reduce({}) {|memo, h| memo.merge(h) {|_,v1,v2| v1 + v2} }
#=> {0=>12, 1=>15, 2=>18}
我们使用空哈希{}
作为memo
的初始值,并将data_hash
数组中存在的每个哈希值合并 - merge
的块将确保正在合并密钥,它的值会相加,以便最终得到该密钥的所有值的总和
步骤3:在哈希上使用to_a
来获取数组结果
reduced_hash.to_a
#=> [[0, 12], [1, 15], [2, 18]]