Ruby - 数组A是否包含数组B的所有元素

el_*_*ick 14 ruby arrays ruby-on-rails

有没有方法来检查数组A是否包含数组B的所有元素?

fl0*_*00r 17

你可以试试这个

a.sort.uniq == b.sort.uniq
Run Code Online (Sandbox Code Playgroud)

要么

(a-b).empty?
Run Code Online (Sandbox Code Playgroud)

如果[1,2,2] != [1,2]在您的情况下,您可以:

a.group_by{|i| i} == b.group_by{|i| i}
Run Code Online (Sandbox Code Playgroud)

  • '(ab).empty?`的+1 (9认同)
  • 以防有人在这里结束:**这些都是错误的**.正确的答案是`(ba).empty?`,而不是相反.其他人则完全错了.另见http://stackoverflow.com/questions/7387937/ruby-rails-how-to-determine-if-one-array-contains-all-elements-of-another-array (2认同)

Mar*_*ski 7

这应该适合您的需要:

(a & b) == b
Run Code Online (Sandbox Code Playgroud)

  • 这不会成为一项规则.`a = [1,2,2,1,3]; b = [3,2,1]; (a&b)== b => false` (4认同)

Mic*_*ohl 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
Run Code Online (Sandbox Code Playgroud)

对于小型数组,我通常与fl00r建议的相同:

>> (b-a).empty? #=> true
Run Code Online (Sandbox Code Playgroud)


小智 5

我更喜欢这样做:(b - a).blank?#告诉b包含在a中


Wes*_*ger 5

最简单的方法是这样的:

(b-a).empty?
Run Code Online (Sandbox Code Playgroud)