【问题标题】:Adding values of multi dimensional array添加多维数组的值
【发布时间】:2016-01-30 18:59:43
【问题描述】:

我正在处理图表数据。我有来自三个来源的三组数据,我正试图按他们的年份将它们加在一起,形成一个新的客场。在我的示例中,年份是 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]]

为了增加复杂性,它并不总是三组数据,可能是一组或十二组,任意数量。

非常感谢任何帮助。

【问题讨论】:

  • 向我们展示您尝试过的代码

标签: arrays ruby multidimensional-array


【解决方案1】:

解决方案

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]]

【讨论】:

  • 非常感谢您的解释。
猜你喜欢
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-14
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多