给出两组值:
var subset = new[] { 2, 4, 6, 8 }; var superset = new[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
如何确定是否superset
包含所有元素subset
?
我想出了这个:
superset.Intersect(subset).Count() == subset.Count()
这是最合乎逻辑且最有效的方法吗?
计数?怎么样没有?
bool contained = !subset.Except(superset).Any();
所以,我的另一个答案很容易使用.但这是一个O(n*m)解决方案.
这是一个稍微不太友好的O(n + m)解决方案.如果超集是巨大的,那么应该使用它.它避免重复枚举超集.
HashSethashSet = new HashSet (superset); bool contained = subset.All(i => hashSet.Contains(i));
我有一个使用现有Contains()方法的扩展方法.我发现它比使用Instersect()或Except()更直观.
public static bool ContainsAll(this IEnumerable source, IEnumerable values) { return values.All(value => source.Contains(value)); }