问题
Suppose I have the following Ruby code:
array_1 = ['a', 'b']
array_2 = ['a', 'b', 'c']
some_function(array_1, array_2) # => True
some_function(array_2, array_1) # => False
some_function(['a', 'b'], ['a', 'd']) # => False
some_function(['x', 'y'], array_2) # => False
I am pretty much looking for some_function
to return True when Parameter 2 contains all of the elements in Parameter 1.
回答1:
def f a,b
(a-b).empty?
end
回答2:
From a previous post,
def f a,b
(a-b).empty?
end
will not work the way you expect, for example:
a1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
a2 = [2, 3, 5, 9]
(a1-a2).empty? # returns true
however,
a1-a2 # returns [1, 4, 6, 7, 8], not empty
thus f
returns false.
A more accurate solution, if you want a one-liner would be:
def f a,b
a&b == b
end
a&b
will return all elements that are in both a
and b
then we check to see if that is equal to b
For ambiguity sake:
def f a,b
(a&b == a) || (a&b == b)
end
回答3:
def f a,b
tmp = a.map(|i| b.include?(i))
tmp.include?(false)
end
来源:https://stackoverflow.com/questions/3897525/ruby-array-contained-in-array-any-order