无论元素的顺序如何,如何检查一个数组是否是另一个数组的子集?
a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
...?
a1 is a subset of a2
无论元素的顺序如何,如何检查一个数组是否是另一个数组的子集?
a1 = [3, 6, 4]
a2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
...?
a1 is a subset of a2
最简单的可能是:
(a1 - a2).empty?
使用套装。然后你可以使用set.subset?
. 例子:
require 'set'
a1 = Set[3,6,4]
a2 = Set[1,2,3,4,5,6,7,8,9]
puts a1.subset?(a2)
输出:
true
在线查看它:ideone
您已经拥有的数据结构是完美的,只需检查交集:
(a1 & a2) == a1
更新:讨论排列的评论很有趣且很有创意,但完全不正确,因为 Ruby 实现者预料到了这个问题,并指定结果的顺序是a1
. 所以这确实有效,并将在未来继续有效。(数组是有序的数据结构,而不是集合。你不能只改变数组操作的顺序。)
我更喜欢Dave Newton的酷酷答案,但这个答案也有效,并且像 Dave 的一样,也是核心 Ruby。
也许速度不快,但可读性很强
def subset?(a,b)
a.all? {|x| b.include? x}
end