为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕森卡 2019-12-21 12:35:21
给定两组值: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()这是最合逻辑且最有效的方法吗?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

计数?怎么样呢?


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


查看完整回答
反对 回复 2019-12-21
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

因此,我的其他答案非常易于使用。但这是一个O(n * m)解决方案。


这是一个不太友好的O(n + m)解决方案。如果超集为HUGE,则应使用此选项。它避免了重复枚举超集。


HashSet<int> hashSet = new HashSet<int>(superset);

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


查看完整回答
反对 回复 2019-12-21
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

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


public static bool ContainsAll<T>(this IEnumerable<T> source, IEnumerable<T> values)

{

    return values.All(value => source.Contains(value));

}


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 576 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信