我正在处理图表数据。我有来自三个来源的三组数据,我正试图将它们按年份添加到一个新的列表中。在我的例子中,年份是 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]]
为了增加复杂性,它不会总是三组数据,它可能是一组或十二组,任何数量。
非常感谢任何帮助。
最佳答案
解决方案:
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
数组中存在的每个散列与其合并 - block 到merge
将确保在合并键时,将其值相加,以便最终我们得到该键所有值的总和
第三步:在散列上使用to_a
得到数组结果
reduced_hash.to_a
#=> [[0, 12], [1, 15], [2, 18]]
关于arrays - 添加多维数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35105779/