有没有方法可以检查数组A是否包含数组B的所有元素?
答案 0 :(得分:17)
你可以试试这个
a.sort.uniq == b.sort.uniq
或
(a-b).empty?
如果你的情况是[1,2,2] != [1,2]
,你可以:
a.group_by{|i| i} == b.group_by{|i| i}
答案 1 :(得分:7)
这应该适合您的需要:
(a & b) == b
答案 2 :(得分:6)
您可以使用Ruby的Set
类:
>> require 'set' #=> true
>> a = [*1..5] #=> [1, 2, 3, 4, 5]
>> b = [*1..3] #=> [1, 2, 3]
>> a.to_set.superset? b.to_set #=> true
对于小型数组,我通常与fl00r建议的相同:
>> (b-a).empty? #=> true
答案 3 :(得分:5)
我更喜欢这样做:(b - a).blank?
#告诉b包含在
答案 4 :(得分:4)
最简单的方法是:
(b-a).empty?
答案 5 :(得分:2)
还有Set类(标准库的一部分),它允许您只检查B是否是A的子集,例如。
>> a = [1,2,3,4,5] => [1, 2, 3, 4, 5]
>> b = [3,4,5] => [3, 4, 5]
>> require 'set' => true
>> set_a = a.to_set => #<Set: {1, 2, 3, 4, 5}>
>> set_b = b.to_set => #<Set: {3, 4, 5}>
>> set_b.subset? set_a => true
答案 6 :(得分:0)
您可能想要查看Ruby Standard库中的Set类。 proper_subset?
方法可能会做你想要的。
答案 7 :(得分:0)
Ruby 2.6 +
Ruby为此目的在2.6中引入了difference
。
非常快,可读性很强,如下所示:
a = [1, 2, 3, 4, 5, 6]
b = [1, 2, 3, 4, 5, 6]
a.difference(b).any?
# => false
a.difference(b.reverse).any?
# => false
a = [1, 2, 3, 4, 5, 6]
b = [1, 2, 3]
a.difference(b).any?
# => true
希望对某人有帮助!