Arrays 从数组数组中获取公共元素

Arrays 从数组数组中获取公共元素,arrays,ruby,Arrays,Ruby,假设我有一个这样的数组: [ [1, 2, 3, 4], [3, 4, 5, 6], [4, 5, 6, 8] ] 我需要得到他们之间的共同元素。我怎样才能做到这一点 结果应该是 common_elements([[1, 2, 3, 4], [3, 4, 5, 6], [4, 5, 6, 8]]) # => [4] 该方法可为您设置交点: [1, 2, 3] & [2, 3, 4] # => [2, 3] 该方法可以使用以下操作组合给定数组中的值: [1,

假设我有一个这样的数组:

[
  [1, 2, 3, 4],
  [3, 4, 5, 6],
  [4, 5, 6, 8]
]
我需要得到他们之间的共同元素。我怎样才能做到这一点

结果应该是

 common_elements([[1, 2, 3, 4], [3, 4, 5, 6], [4, 5, 6, 8]]) # => [4]
该方法可为您设置交点:

[1, 2, 3] & [2, 3, 4] # => [2, 3]
该方法可以使用以下操作组合给定数组中的值:

[1, 2, 3].reduce(:+) # => 6
该方法可为您设置交点:

[1, 2, 3] & [2, 3, 4] # => [2, 3]
该方法可以使用以下操作组合给定数组中的值:

[1, 2, 3].reduce(:+) # => 6

这里是另一种“手动lol”的方法。。。您可以对每个嵌套数组进行迭代,
[[0]、[1]、[2]]、
,然后对每个嵌套数组进行迭代并使用include ary[pos]。在所有三个嵌套数组之间包含?(x)以查找相交值,这将很慢,但如果您想添加更多条件,则很方便

 user> ary = [ [1,2,3,4], [3,4,5,6], [4,5,6,8] ]
 => [[1, 2, 3, 4], [3, 4, 5, 6], [4, 5, 6, 8]] 

user> ary.each { |f| f.each {|x| 
                 puts "#{x}"  if ary[0].include?(x) && ary[1].include?(x) &&  
                 ary[2].include?(x)  }} 
4
4
4
或者简单地说

2.1.2 :003 > ary = [ [1,2,3,4], [3,4,5,6], [4,5,6,8] ].inject(:&)
 => [4] 

这里是另一种“手动lol”的方法。。。您可以对每个嵌套数组进行迭代,
[[0]、[1]、[2]]、
,然后对每个嵌套数组进行迭代并使用include ary[pos]。在所有三个嵌套数组之间包含?(x)以查找相交值,这将很慢,但如果您想添加更多条件,则很方便

 user> ary = [ [1,2,3,4], [3,4,5,6], [4,5,6,8] ]
 => [[1, 2, 3, 4], [3, 4, 5, 6], [4, 5, 6, 8]] 

user> ary.each { |f| f.each {|x| 
                 puts "#{x}"  if ary[0].include?(x) && ary[1].include?(x) &&  
                 ary[2].include?(x)  }} 
4
4
4
或者简单地说

2.1.2 :003 > ary = [ [1,2,3,4], [3,4,5,6], [4,5,6,8] ].inject(:&)
 => [4] 

不要像
[a=[1,2,3,4],b=[3,4,5,6],c=[4,5,6,8]]那样编写代码。这是一个维护噩梦,绝对不是推荐的或惯用的。我同意@the Tin Man,我已将答案更改为不包含a=,b=,c=等等…现在尝试不重复使用“包含”来执行此操作。想象一下,如果数组的大小增加到原来的100倍,那么性能就会下降到爬行状态。不要像
[a=[1,2,3,4],b=[3,4,5,6],c=[4,5,6,8]
那样编写代码。这是一个维护噩梦,绝对不是推荐的或惯用的。我同意@the Tin Man,我已将答案更改为不包含a=,b=,c=等等…现在尝试不重复使用“包含”来执行此操作。想象一下,如果阵列的大小增加到原来的100倍,那么性能就会下降到爬行状态。