繁体   English   中英

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

[英]Get elements in common from array of arrays

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

[
  [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, 4], [3, 4, 5, 6], [4, 5, 6, 8]].reduce(:&) # => [4]

Array#&方法为您设置交集:

[1, 2, 3] & [2, 3, 4] # => [2, 3]

Enumerable#reduce方法可以使用以下操作组合给定数组中的值:

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

这是“手动大声笑”的另一种实现方法...分别迭代嵌套数组[[0],[1],[2]],然后迭代每个嵌套数组并使用include ary [ pos] .include?(x),在所有三个嵌套数组之间使用AND来查找相交的值,这会很慢,但是如果您想添加更多条件则很方便。

 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] 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM