Arrays 基于同一伙伴或字母合并数组

Arrays 基于同一伙伴或字母合并数组,arrays,ruby,multidimensional-array,Arrays,Ruby,Multidimensional Array,我有这个嵌套数组 x = [ [['A', 100], ['B', 200]], # ROW 1 [['A', 150], ['C', 700]] # ROW 2 ].flatten(1) 我想根据字母对这些数组进行分组。因此,输出将如下所示: [ ['A', 100, 150], ['B', 200, 0], ['C', 0, 700] ] 这是我目前的代码: m = x.map(&:first).uniq.sort.map do |c| [c, x.se

我有这个嵌套数组

x = [
  [['A', 100], ['B', 200]], # ROW 1
  [['A', 150], ['C', 700]]  # ROW 2
].flatten(1)
我想根据字母对这些数组进行分组。因此,输出将如下所示:

[
  ['A', 100, 150],
  ['B', 200, 0],
  ['C', 0, 700]
]
这是我目前的代码:

m = x.map(&:first).uniq.sort.map do |c|
  [c, x.select{|v| v.first == c}.map{|h| h.last}].flatten
end
返回:

[
  ['A', 100, 150], 
  ['B', 200], 
  ['C', 700]
]
到目前为止,这是我能得到的最接近的。我的输出的问题是,如果行中不存在0,它就不会添加0


在第1行中,C不存在,因此我需要在第一列中添加0,与第2行相同,B不存在,因此我需要在第二列中添加0。

您的问题有两部分。首先,你需要知道你在寻找什么“钥匙”。所以A,B,C。如果它们是静态的,则使它们成为静态的,如果不只是通过执行以下操作来获取它们:

x=[ [A',100],[B',200]],第1行 [A',150],[C',700]]第2排 ] keys=x.flat_映射{| l | l.map&:first}.uniq 现在,下一部分是找出哪些键在哪一行中。所以这会变成这样:

结果=[] 钥匙。每个do |钥匙| 部分=[键,0,0] x、 每个带索引的|行,索引| 检测键是否在行中。如果发现,请执行以下操作: 部分[索引+1]=值 终止 结果:pushpart 终止 结果 我还没有完全测试过代码,但我想它可以像这样工作。

关于扁平化1–原始阵列已经扁平化了吗?