Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 求所有集合中分组的有效最大值_Ruby_Multidimensional Array_Intersection - Fatal编程技术网

Ruby 求所有集合中分组的有效最大值

Ruby 求所有集合中分组的有效最大值,ruby,multidimensional-array,intersection,Ruby,Multidimensional Array,Intersection,我有一个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阵列。然而,似乎它可以更优雅地解决它,尽管我对注入有点陌生,不确定如何实现它来解决这个问题。这是在Ruby中完成的 感谢您的帮助。谢

我有一个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阵列。然而,似乎它可以更优雅地解决它,尽管我对注入有点陌生,不确定如何实现它来解决这个问题。这是在Ruby中完成的

感谢您的帮助。谢谢

--更新--
通过有效分组,我的意思是通过找到最大的重复集,找到在结果中生成最少集合的最佳组合

另一个例子:

[[1, 2, 3, 4],
 [1, 4],
 [1, 3, 4],
 [1, 2, 3, 4, 5],
 [2, 5]]
可能结果(共8套):

这是一个很好的结果,但第一组可以优化

更好的结果(共7套):


两个结果共包含5个唯一集。较好结果中的集合为(1,2,3,4)、(1,4)、(3)、(5)和(2,5)。较好结果中的集合总数为7,而可能结果中的集合总数为8。我们需要最少数量的集合。

您肯定应该解释“最有效的分组”的含义。同时,如果只需要将数组拆分为两个元素块,只需将
map
每个片段组合起来即可:

arr.map{|a| a.each_slice(2).to_a}
# => [[[1, 2]], [[1, 2], [3, 4]], [[3, 4]], [[1, 2], [5]]] 

首先,你应该用伪代码找出你想做的事情的算法(现在阻碍你的不是Ruby)。然后用这些ruby灵长类来实现它


我认为您需要详细说明“有效分组”。为什么((1,2,3,4))、((1,4))、((1,3,4))、((1,2,3,4,5))、((2,5))在您的第二个示例中不是最好的?它总共只有5组,所以不到7组。我更新了这个问题,以帮助澄清“最有效的分组”。它并不总是2元素块。
[[[1, 2, 3, 4]],
 [[1, 4]],
 [[1, 4], [3]],
 [[1, 2, 3, 4], [5]],
 [[2, 5]]]
arr.map{|a| a.each_slice(2).to_a}
# => [[[1, 2]], [[1, 2], [3, 4]], [[3, 4]], [[1, 2], [5]]]