我有一个2D数组,想要生成一个3D数组,它将显示所有集合的最有效分组。例如:
[[1, 2],
[1, 2, 3, 4],
[3, 4],
[1, 2, 5]]
结果:
[[[1, 2]],
[[1, 2], [3, 4]],
[[3, 4]],
[[1, 2], [5]]]
我想我需要做一个嵌套循环并确定交集和差异以生成3D数组。但是,inject(&:&)似乎可以更优雅地解决它,虽然我有点新注入并且不确定如何为此问题实现它。这将在Ruby中完成。
感谢任何帮助。谢谢!
- 更新 -
通过有效分组,我的意思是找到最佳组合,通过找到最大的重复集,在结果中生成最少量的总集合。
另一个例子:
[[1, 2, 3, 4],
[1, 4],
[1, 3, 4],
[1, 2, 3, 4, 5],
[2, 5]]
可能的结果(共8组):
[[[1, 3, 4], [2]],
[[1, 4]],
[[1, 4], [3]],
[[1, 3, 4], [2, 5]],
[[2, 5]]]
这是一个很好的结果,但第一组可以进行优化。
更好的结果(总共7组):
[[[1, 2, 3, 4]],
[[1, 4]],
[[1, 4], [3]],
[[1, 2, 3, 4], [5]],
[[2, 5]]]
两个结果共包含5个唯一集。更好结果的集合是(1,2,3,4),(1,4),(3),(5)和(2,5)。更好结果中的集合总数为7,而可能结果为8。我们想要最少量的套装。
答案 0 :(得分:0)
你绝对应该解释“最有效的分组”的含义。与此同时,如果您只需要将数组拆分为2个元素的块,只需合并map
和each_slice
:
arr.map{|a| a.each_slice(2).to_a}
# => [[[1, 2]], [[1, 2], [3, 4]], [[3, 4]], [[1, 2], [5]]]
答案 1 :(得分:0)
首先,您应该在伪代码中找出您想要做的事情的算法(它不是让您立即回归的Ruby)。然后使用这些红宝石原型来实现它
http://ruby-doc.org/core/classes/Enumerable.html