检查数组是否是Ruby中另一个数组的子集

如何判断一个数组是否是另一个数组的子集,而不管元素的顺序如何?

a1 = [3, 6, 4] a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9] ...? a1 is a subset of a2 

使用集。 那你可以用set.subset? 。 例:

 require 'set' a1 = Set[3,6,4] a2 = Set[1,2,3,4,5,6,7,8,9] puts a1.subset?(a2) 

输出:

真正

看它在线工作: ideone

最简单的可能是:

 (a1 - a2).empty? 

您已经拥有的数据结构是完美的,只需检查交叉点:

 (a1 & a2) == a1 

更新:讨论排列的评论很有趣且富有创意,但由于Ruby实现者预见到了这个问题并指定结果的顺序是a1的顺序,因此非常不正确。 所以这确实有效,并将在未来继续发挥作用。 (数组是有序的数据结构,而不是集合。您不能只是置换数组操作的顺序。)

我更喜欢Dave Newton对于酷感的回答,但这个答案也有效,就像Dave一样,也是核心Ruby。

也许不是很快,但很可读

 def subset?(a,b) a.all? {|x| b.include? x} end