检查List1 <t>中的所有元素是否都在List2 <t> C#</t> </t>中

时间:2012-01-10 12:05:57

标签: c# list

是否可以知道或检查List1中的所有元素是否属于List2的一部分? 例如,如果我有

List1 = { 1,2,3,4 }

List2 = { 1,2,3,5,6,4 }

如果List 1中的所有元素都在List 2中,我想得到True,否则为

  

注意:没有ForLoop

列表可以是整数列表,字符串,...等

9 个答案:

答案 0 :(得分:17)

using System.Linq;

bool allInList2 = !List1.Except(List2).Any();

答案 1 :(得分:8)

您可以使用Intersect方法。

然后,如果结果与List1的长度相同,则表示其所有元素都包含在List2中。

答案 2 :(得分:6)

您可以使用HashSet.IsProperSubsetOf(或IsProperSupersetOf)方法,如下所示:

var hashset1 = new HashSet<int>(list1);
if (hashset1.IsProperSubsetOf(list2)) ...

答案 3 :(得分:5)

最佳性能LINQ解决方案

此代码示例
- 检查 b 中是否存在 中的任何元素 - 然后反转结果

using System.Linq;
....
public static bool ContainsAllItems(List<T> a, List<T> b)
{
    return !b.Except(a).Any();
}

最初找到解决方案here

答案 4 :(得分:3)

使用Intersect LINQ方法:

List1.Intersect(List2).Count() == List1.Count()

请注意,这可以归结为迭代两个列表 - 没办法!

答案 5 :(得分:3)

List<int> list1 = new List<int>() { 1, 2, 3, 4 };
List<int> list2 = new List<int>() { 1, 2, 3, 5, 6, 4 };

list1.All(x => list2.Contains(x));

答案 6 :(得分:2)

创建这些列表的intersection并仅查询该交集结果列表 当然,内部有一个循环(并且必须是ob任何给定的解决方案)

HTH

答案 7 :(得分:0)

bool value = !(l1.Any(item => !l2.Contains(item)));

答案 8 :(得分:0)

扩展方法,长版本:

public static IsSubetOf (this IEnumerable coll1, IEnumerable coll2)
{
  foreach (var elem in coll1)
  {
    if (!coll2.Contains (elem))
    {
      return false;
    }
  }

  return true;
}

简短版本:

public static IsSubetOf (this IEnumerable<T> coll1, IEnumerable<T> coll2)
{
  return !coll1.Any (x => !coll2.Contains (x));
}