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

24 浏览
0 Comments

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

给定:\n

a1 = [5, 1, 6, 14, 2, 8]

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

a2 = [2, 6, 15]

\n在这种情况下,结果是false。\n是否有任何内置的Ruby/Rails方法来确定此类数组包含?\n一种实现方法是:\n

a2.index{ |x| !a1.include?(x) }.nil?

\n是否有更好、更可读的方法?

0
0 Comments

判断一个数组是否包含另一个数组的所有元素是一个常见的问题。解决这个问题的方法有多种,下面是其中一种方法:

方法一:

使用交集操作符`&`来判断。代码如下:

(a2 & a1) == a2

这个代码会创建两个数组的交集,并返回所有在`a2`中也存在于`a1`中的元素。如果交集的结果与`a2`相同,那么就可以确定`a1`包含了`a2`的所有元素。

但是,这种方法只适用于`a2`中的所有元素都不相同的情况。如果`a2`中存在重复元素,这种方法就会失败。在这种情况下,可以使用Tempos提供的方法,我完全推荐他的方法(而且可能更快)。

方法二:

使用`length`方法来判断。代码如下:

len(set(a2) & set(a1)) == len(set(a2))

这个代码会创建两个数组的交集,并返回交集的长度。如果交集的长度等于`a2`的长度,那么就可以确定`a1`包含了`a2`的所有元素。使用`length`方法的性能更好。

需要注意的是,如果交集的元素顺序不同,这种方法就无法正常工作。我在回答这个问题时,通过较难的方式发现了这个问题,之后发现很多聪明的人已经在这里解决了这个问题!非常有趣。如果你有一些测试数据可以重现这个问题,请分享给我。根据我的有限测试,交集的元素顺序似乎已经不再重要。

0
0 Comments

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

有多种方法可以解决这个问题。下面是一些示例代码:

a2.all? { |e| a1.include?(e) }

或者使用数组的交集操作:

(a1 & a2).size == a1.size

需要注意的是,这里使用了`size`来提高效率,如果不考虑效率可以使用以下代码:

(a1 & a2) == a1

以上是纯粹的Ruby代码,不涉及Rails。

如果根据问题中的定义,a1包含a2的所有元素,那么应该使用`(a1 & a2).size == a2.size`,因为a2是较小的数组,它的所有元素应该都包含在较大的数组中,所以两个数组的交集的长度应该与较小的数组长度相同,从而得到`true`。

另外,Ruby 2.7引入了一个新的`intersection`方法,因此我们可以使用更易读的方法来解决这个问题:`(a1.intersection(a2)).size == a1.size`。

0
0 Comments

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

有时候我们需要判断一个数组是否包含另一个数组的所有元素。这篇文章将介绍如何解决这个问题。

假设我们有两个数组a和b:

a = [5, 1, 6, 14, 2, 8]
b = [2, 6, 15]

我们想要判断数组b是否包含数组a的所有元素。我们可以使用减法运算符(-)来找出b中不包含在a中的元素:

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

如果b中有任何一个元素不在a中,那么a - b将返回一个非空数组。所以我们可以通过检查(a - b).empty?来判断b是否包含a的所有元素:

(a - b).empty?
# => false

如果返回值为false,那么b不包含a的所有元素。否则,b包含a的所有元素。

需要注意的是,上述方法只适用于不包含重复元素的数组。如果a或b中包含重复元素,我们需要先使用Array#uniq方法去除重复元素,然后再进行上述操作。例如:

(a.uniq - b.uniq).empty?

如果你想了解更多关于这个的问题,可以访问链接stackoverflow.com/questions/13553822/…

通过减法运算符和empty?方法,我们可以判断一个数组是否包含另一个数组的所有元素。如果你需要处理包含重复元素的数组,可以先使用Array#uniq方法去除重复元素。这些方法对于解决这个问题非常有帮助。

0