给定:
a1 = [5, 1, 6, 14, 2, 8]
我想确定它是否包含以下所有元素:
a2 = [2, 6, 15]
在本例中,结果是false
。
有没有内置的Ruby/Rails方法来识别这样的数组包含?
实现这一点的一种方法是:
a2.index{ |x| !a1.include?(x) }.nil?
有没有更好、更易读的方法?
发布于 2011-09-12 20:39:18
a = [5, 1, 6, 14, 2, 8]
b = [2, 6, 15]
a - b
# => [5, 1, 14, 8]
b - a
# => [15]
(b - a).empty?
# => false
发布于 2011-09-12 20:36:52
也许这更容易读懂:
a2.all? { |e| a1.include?(e) }
您还可以使用数组交集:
(a1 & a2).size == a1.size
请注意,这里使用size
只是为了提高速度,您也可以这样做(速度较慢):
(a1 & a2) == a1
但我猜第一个更具可读性。这3个是纯ruby (不是rails)。
发布于 2011-09-12 20:39:06
这可以通过这样做来实现
(a2 & a1) == a2
这将创建两个数组的交集,返回a2
中也在a1
中的所有元素。如果结果与a2
相同,则可以确保a1
中包含所有元素。
只有当a2
中的所有元素都彼此不同时,这种方法才有效。如果有替身,这种方法就会失败。来自Tempos的方法仍然有效,所以我全心全意地推荐他的方法(而且它可能更快)。
https://stackoverflow.com/questions/7387937
复制相似问题