首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定一个数组是否包含另一个数组的所有元素

如何确定一个数组是否包含另一个数组的所有元素
EN

Stack Overflow用户
提问于 2011-09-12 20:34:13
回答 7查看 114.8K关注 0票数 198

给定:

代码语言:javascript
复制
a1 = [5, 1, 6, 14, 2, 8]

我想确定它是否包含以下所有元素:

代码语言:javascript
复制
a2 = [2, 6, 15]

在本例中,结果是false

有没有内置的Ruby/Rails方法来识别这样的数组包含?

实现这一点的一种方法是:

代码语言:javascript
复制
a2.index{ |x| !a1.include?(x) }.nil?

有没有更好、更易读的方法?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-09-12 20:39:18

代码语言:javascript
复制
a = [5, 1, 6, 14, 2, 8]
b = [2, 6, 15]

a - b
# => [5, 1, 14, 8]

b - a
# => [15]

(b - a).empty?
# => false
票数 347
EN

Stack Overflow用户

发布于 2011-09-12 20:36:52

也许这更容易读懂:

代码语言:javascript
复制
a2.all? { |e| a1.include?(e) }

您还可以使用数组交集:

代码语言:javascript
复制
(a1 & a2).size == a1.size

请注意,这里使用size只是为了提高速度,您也可以这样做(速度较慢):

代码语言:javascript
复制
(a1 & a2) == a1

但我猜第一个更具可读性。这3个是纯ruby (不是rails)。

票数 89
EN

Stack Overflow用户

发布于 2011-09-12 20:39:06

这可以通过这样做来实现

代码语言:javascript
复制
(a2 & a1) == a2

这将创建两个数组的交集,返回a2中也在a1中的所有元素。如果结果与a2相同,则可以确保a1中包含所有元素。

只有当a2中的所有元素都彼此不同时,这种方法才有效。如果有替身,这种方法就会失败。来自Tempos的方法仍然有效,所以我全心全意地推荐他的方法(而且它可能更快)。

票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7387937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档