arry = [["a",3.0,3], ["b",4.0,4], ["c",5.0,5]]
我正在寻找以下输出
[["a", 3.0, [["b", 4.0, 7], ["c", 5.0, 8]]],
["b", 4.0, [["a", 3.0, 7], ["c", 5.0, 9]]],
["c", 5.0, [["a", 3.0, 8], ["b", 4.0, 9]]]]
这就是我所做的
- 根据数组的大小,我迭代了循环
- 首先,我选择了第一个要素。
- 删除了它并创建了一个新数组。我迭代了通过新数组,计算总和并将元素推送到新阵列2
- 我在最后添加了已删除的元素
我无法生成以下上述输出格式。我能够做的输出是
[a,3.0,b,4.0,7]
7 here is 3+4
[a,3.0,c,5.0,8]
[b,4.0,c,5.0,9]
..etc
除此之外,如何编码显示,让我们只说小于8的元素
并获取此输出
[["a",3.0,["b",4.0,7]],["b",4.0,["a",5.0,7]],["c",5.0,[]]
arry.map do |inner|
dup = inner.dup
n = dup[2]
dup[2] = []
arry.each do |other|
next if other == inner # Only want other inner arrays
other_dup = other.dup
other_dup[2] += n
dup[2] << other_dup
end
dup
end
这计算结果为:
[["a", 3.0, [["b", 4.0, 7], ["c", 5.0, 8]]],
["b", 4.0, [["a", 3.0, 7], ["c", 5.0, 9]]],
["c", 5.0, [["a", 3.0, 8], ["b", 4.0, 9]]]]
更新:很高兴这就是你想要的。 这很丑陋,但我认为它满足了您的过滤目标:
mapped.map do |inner|
inner_dup = inner.dup
inner_dup[2] = inner_dup[2].select do |inner_inner|
inner_inner[2] < 8 # Condition for the elements you want to test
end
inner_dup
end
这计算结果为:
[["a", 3.0, [["b", 4.0, 7]]], ["b", 4.0, [["a", 3.0, 7]]], ["c", 5.0, []]]
再次请注意,这与您指定的输出略有不同,但我相信这是您真正想要的。(如果每个组有多个内部数组匹配怎么办?