arrays - 添加多维数组的值

标签 arrays ruby multidimensional-array

我正在处理图表数据。我有来自三个来源的三组数据,我正试图将它们按年份添加到一个新的列表中。在我的例子中,年份是 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/

相关文章:

java - 如何对简单的整数二维数组进行排序?

c++ - 使用一维字符数组翻转图像

ruby - 包含模块时使用间接有优势吗(来自 7 周内的 7 种语言,Ruby 第 3 天)

ruby-on-rails - 向表 Rails 3 添加列后出现未知属性错误

c - 使用双指针参数访问函数内的数组成员的段错误

JavaScript 矩阵边界不正确

arrays - 内存自适应合并算法?

ruby-on-rails - 如果值存在则返回值

c - 纯粹使用指针动态分配二维数组

java - 读取文件并将数据存储到多个数组时出错