我需要检查一个数组,看看它是否仅包含另一个数组的某些值。
我可以想到使用方法map
和select
,然后使用includes?
遍历数组的方法,但这远没有效率。
values = ['2','4','5'] # return true if the array only contains these values...
a = ['1', '2', '3']
b = ['1', '2', '4']
c = ['2', '4']
d = ['4', '5']
def compare(checked_array, standard)
# Do something
end
因此,出于我的目的,输出应该是
答案 0 :(得分:4)
简单的减法将为您提供所需的输出,
def compare(checked_array, standard)
(checked_array - standard).empty?
end
答案 1 :(得分:2)
数组交集的另一种方法:
def compare(checked_array, standard)
(checked_array & standard) == standard
end
答案 2 :(得分:2)
您可以使用Set#subset?:
require 'set'
def compare(checked_array, standard)
s = Set.new(standard)
c = Set.new(checked_array)
c.subset? s
end
文档说明:
Set实现了具有无重复的无序值的集合。这是Array直观的互操作功能与Hash的快速查找的结合。
答案 3 :(得分:2)
可能不如使用减法/相交那么短而甜美,但这里是这样:
df <- structure(list(Indx = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L), Operation1 = c(1, 0.5, 0, 1, 0.5,
1, 0.5, -1, 1, 0, 0.5, 0, 0.5, 1, 0.5, 0, -1), Operation2 = c(450L,
84L, 48L, 4L, 4L, 123L, 14L, 45L, 471L, 47L, 44L, 145L, 78L,
71L, 19L, 2L, 45L)), class = "data.frame", row.names = c(NA, -17L))