Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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_Arrays_Foreach_Each_Intersection - Fatal编程技术网

在数组中相交每个数组-Ruby

在数组中相交每个数组-Ruby,ruby,arrays,foreach,each,intersection,Ruby,Arrays,Foreach,Each,Intersection,我想找到数组中每个数组元素的交集,然后取交集 输入是数组的数组,例如“下面的脚本中提到的“列表数组” “过滤器”是需要对观察到的交叉口总长度施加的限制 输出应该是这样的数组“[[2,4]]” list_数组=[[1,2,3,4],[2,5,6],[1,5,8],[8,2,4]] 过滤器=2 第一个\u元素\u数组=array.new 列出数组。每个数组都有索引do |每个数组1,索引1 | 列出_数组。每个_带有_索引do |每个_数组2,index2| 除非index1=2}.map(&:to

我想找到数组中每个数组元素的交集,然后取交集

输入是数组的数组,例如“下面的脚本中提到的“列表数组” “过滤器”是需要对观察到的交叉口总长度施加的限制 输出应该是这样的数组“[[2,4]]”

list_数组=[[1,2,3,4],[2,5,6],[1,5,8],[8,2,4]]
过滤器=2
第一个\u元素\u数组=array.new
列出数组。每个数组都有索引do |每个数组1,索引1 |
列出_数组。每个_带有_索引do |每个_数组2,index2|
除非index1

上述过程需要较长的执行时间,因为我的数组太长(以百万行为单位)。我需要一个简单的方法来处理这个问题。有人对此有什么简单的想法吗?

在破译您的代码时,您要求的似乎是“返回集合的成对组合之间的交集,如果该交集具有特定的大小(示例中为2)”。我会写(功能方法):

建议的优化:1)使用集合,2)使用自定义抽象
Enumerable#map_compact
(相当于
map
+
compact
,但它会动态丢弃
nil
s,自己编写)。3) 筛选出不满足谓词的子阵列:

require 'set'
xss = list_arrays.select { |xs| xs.size >= 2 }.map(&:to_set)
xss.combination(2).map_compact do |xs, ys|
  zs = xs & ys 
  zs.size == 2 ? zs : nil
end
#=> [#<Set: {2, 4}>]
require'set'
xss=list|u array.select{xs|xs.size>=2}.map(&:to|u set)
组合(2).map|u compact do | xs,ys|
zs=xs&ys
zs.size==2?zs:nil
结束
#=> [#]

破译您的代码您所要求的似乎是“如果集合的两个组合之间的交集具有特定的大小(示例中为2),则返回该交集之间的交集”。我会写(功能方法):

建议的优化:1)使用集合,2)使用自定义抽象
Enumerable#map_compact
(相当于
map
+
compact
,但它会动态丢弃
nil
s,自己编写)。3) 筛选出不满足谓词的子阵列:

require 'set'
xss = list_arrays.select { |xs| xs.size >= 2 }.map(&:to_set)
xss.combination(2).map_compact do |xs, ys|
  zs = xs & ys 
  zs.size == 2 ? zs : nil
end
#=> [#<Set: {2, 4}>]
require'set'
xss=list|u array.select{xs|xs.size>=2}.map(&:to|u set)
组合(2).map|u compact do | xs,ys|
zs=xs&ys
zs.size==2?zs:nil
结束
#=> [#]


用一段代码(特别是当它不是一段好代码时)来代替表达你想要的东西是不好的。直接写下你想要的。什么是
filter=2
?另外,请给出输入/输出示例。这个问题很不清楚。在这个问题中添加了更多的信息。谢谢你的通知。@PalaniKannan我看到你编辑了这个问题,但没什么不同。目前还很不清楚。你真的认为有人会理解你所说的对交叉点元素的限制是什么意思吗。我编辑了更多的信息。我在这里制作完美问题内容的经验较少。你的信息很有价值,我试图改进它。但是,对像我这样的初学者来说,否决票是令人沮丧的。。。无论如何,谢谢你的信息:)。用一段代码(尤其是当它不是一段好代码时)来代替表达你想要的东西是不好的。直接写下你想要的。什么是
filter=2
?另外,请给出输入/输出示例。这个问题很不清楚。在这个问题中添加了更多的信息。谢谢你的通知。@PalaniKannan我看到你编辑了这个问题,但没什么不同。目前还很不清楚。你真的认为有人会理解你所说的对交叉点元素的限制是什么意思吗。我编辑了更多的信息。我在这里制作完美问题内容的经验较少。你的信息很有价值,我试图改进它。但是,对像我这样的初学者来说,否决票是令人沮丧的。。。无论如何,谢谢你的信息:)。谢谢@tokland。为了理解我:)@PalaniKannan你写了你想要的
[[2,4],[2,8]]
,这不是这个答案所给出的。您的问题写得不准确,或者您选择了错误的答案。@sawa:
list\u数组
在问题中被编辑过,我使用的是原始值。@tokland我明白了。这个问题非常混乱。问题中的列表数组再次根据答案进行修改。抱歉搞混了@sawa。我需要更多的经验来做得比声誉>20K的人更好。我为我的错误道歉。我认为,这不是一个初学者的地方。可能是给极客的。再次为我的错误感到抱歉。谢谢@tokland。为了理解我:)@PalaniKannan你写了你想要的
[[2,4],[2,8]]
,这不是这个答案所给出的。您的问题写得不准确,或者您选择了错误的答案。@sawa:
list\u数组
在问题中被编辑过,我使用的是原始值。@tokland我明白了。这个问题非常混乱。问题中的列表数组再次根据答案进行修改。抱歉搞混了@sawa。我需要更多的经验来做得比声誉>20K的人更好。我为我的错误道歉。我认为,这不是一个初学者的地方。可能是给极客的。再次为我的错误感到抱歉。
require 'set'
xss = list_arrays.select { |xs| xs.size >= 2 }.map(&:to_set)
xss.combination(2).map_compact do |xs, ys|
  zs = xs & ys 
  zs.size == 2 ? zs : nil
end
#=> [#<Set: {2, 4}>]