当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《使用Linq确定序列是否包含另一个序列的所有元素》经验,为你挑选了3个好方法。

给出两组值:

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

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



1> Amy B..:

计数?怎么样没有?

bool contained = !subset.Except(superset).Any();


+1 Any()比Count()更有效

2> Amy B..:

所以,我的另一个答案很容易使用.但这是一个O(n*m)解决方案.

这是一个稍微不太友好的O(n + m)解决方案.如果超集是巨大的,那么应该使用它.它避免重复枚举超集.

HashSet hashSet = new HashSet(superset);
bool contained = subset.All(i => hashSet.Contains(i));



3> Anders..:

我有一个使用现有Contains()方法的扩展方法.我发现它比使用Instersect()或Except()更直观.

public static bool ContainsAll(this IEnumerable source, IEnumerable values)
{
    return values.All(value => source.Contains(value));
}

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有