根据Array include any value from another array?,我们如何确定数组中的所有元素是否包含在另一个数组中?
cheeses = %w(brie feta)
foods = %w(feta pizza brie bread)
答案 0 :(得分:2)
我们可以在链接的帖子中使用类似于the second highest rated solution的方法,利用all?
代替any?
。
重要的区别在于数组顺序很重要。第一个必须最小。这很直观-两个项目的数组不能包含四个项目的所有项目。
cheeses.all? { |cheese| foods.include?(cheese) } # => true
但是现在我们可以看看另一篇文章中的the highest rated answer,希望我们可以这样做。通过比较两个数组的交集与最小数组的整体,我们可以做到。如果它们匹配,则意味着最小数组中的所有单词都包含在最大单词中。这里的顺序也很重要,但可能并不立即清楚为什么。
cheeses & foods == cheeses # => true
foods & cheeses == cheeses # => false
第二种情况失败,因为数组中项目的顺序不同。
cheeses & foods # => ["brie", "feta"]
foods & cheeses # => ["feta", "brie"]
这可能很难理解,因为如果原始数组遵循相同的顺序,则不会有什么不同。要记住的是,&
将保留第一个数组的顺序,因此请确保要与之比较的是该数组。
或者,对结果进行排序,您不必担心顺序。
(foods & cheeses).sort == cheeses.sort # => true
答案 1 :(得分:2)
您可以简单地从另一个数组中减去一个数组,如果结果为空数组,则包含所有值:
cheeses = %w(brie feta)
foods = %w(feta pizza brie bread)
(cheese - foods).empty?
>>true