使用Linq确定一个序列是否包含另一个序列的所有元素

给定两组值:


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()

这是最合逻辑且最有效的方法吗?


慕森卡
浏览 579回答 3
3回答

慕虎7371278

计数?怎么样呢?bool contained = !subset.Except(superset).Any();

拉风的咖菲猫

因此,我的其他答案非常易于使用。但这是一个O(n * m)解决方案。这是一个不太友好的O(n + m)解决方案。如果超集为HUGE,则应使用此选项。它避免了重复枚举超集。HashSet<int> hashSet = new HashSet<int>(superset);bool contained = subset.All(i => hashSet.Contains(i));

qq_笑_17

我有一个使用现有的Contains()方法的扩展方法。我发现它比使用Instersect()或Except()更直观。public static bool ContainsAll<T>(this IEnumerable<T> source, IEnumerable<T> values){&nbsp; &nbsp; return values.All(value => source.Contains(value));}
打开App,查看更多内容
随时随地看视频慕课网APP