2016-03-10 59 views
-1

我有数组:有什么办法检查数组是否在数组中?

a = [1,3,4,5] 
b = [1,2,3] 

有没有检查任何短期方式:

a.include? b 

它应该返回true作为3是存在的。

我可以这样做:

b.each do |bb| 
puts true if a.include? bb 
end 

但这不是用于遍历一个大阵,以检查它的好方法。

+1

的可能的复制[的Ruby/Rails:如何判断一个数组包含的其他所有元素数组?](http://stackoverflow.com/questions/7387937/ruby-rails-how-to-determine-if-one-array-contains-all-elements-of-another-array) – lifetimes

回答

1

您可以检查数组不同的是空:

a = [1, 2, 3] 
b = [1, 3, 4, 5] 

(a - b).empty? # false 
0

您可以使用Set.disjoint?

require 'set' 
Set[1, 2, 3].disjoint? Set[3, 4] # => false 
Set[1, 2, 3].disjoint? Set[4, 5] # => true 
1

一种方式做到这一点是使用Enumerable.any?

[1, 3, 4, 5].any? { |i| [1, 2, 3].include? i } 
+1

这是唯一的答案这不会迭代一个或两个a全部被炸毁。由于OP说他们不想迭代大数组,所以这应该是被接受的答案。 –

0

如果我减去a - b和a有一些b也有的元素,那么新的a - b具有较少数量的元素,因为a-b返回所有元素,a具有但b没有。我可以根据原始尺寸检查结果。

a = [1,3,4,5] 
b = [1,2,3] 
(a - b).size < a.size 
# => true 
1

您可以使用数组路口:

a = [1,2,3,4] 
b = [2,4] 
c = [5,6] 

它提供了以下结果:

(a & b).any? 
    # true 
    (a & c).any? 
    # false 
相关问题