递归地从多维数组中查找一组公共元素
我有一个多维数组:
a=[[2,3,4],[1,3,4],[1,2],[1,2,3,4]]
我必须比较所有 4 个子数组并获取公共元素。接下来,一次取 3 个子数组并获取公共元素。然后一次取 2 个子数组并获取公共元素,在红宝石中。
I have a multi-dimensional array:
a=[[2,3,4],[1,3,4],[1,2],[1,2,3,4]]
i've to compare all the 4 sub-arrays and get common elements.Next,take 3 subarrays at a time and get common elements.then take 2 sub arrays at a time and get common elements, in RUBY.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这应该可以在最近的 Ruby 版本中完成工作:
这是一个具有类似解决方案的相关问题。 “技巧”在方法
Array#&
中,它计算两个数组的交集(作为集合运算)。它是关联操作,因此我们可以依次将其应用于每个子数组,保留累加的结果,因此inject
非常适合它。简而言之,array.inject(&:&)
将在array
的每个成员中生成元素的最大公共子集。&:&
只是 Ruby 的简写,用于从名为&
的方法中创建Proc
并将其作为块提交给注入
,而不是编写:This should do the job in recent Ruby versions:
Here's a related question with similar solution. The "trick" is in method
Array#&
, which calculates the intersection (as a set operation) of the two arrays. It is associative operation, so we can apply it on each subarray in turn, keeping the accumulated result, henceinject
is perfect for it. In short,array.inject(&:&)
will result with a greatest common subset of elements in every member ofarray
.&:&
is just a Ruby shorthand for making aProc
out of method named&
and submitting it as a block toinject
, instead of writing: