查找listA是否包含不在listB中的任何元素

Ton*_*ony 38 c# linq

我有两个清单:

List<int> listA     
List<int> listB
Run Code Online (Sandbox Code Playgroud)

如何使用LINQ检查是否listA存在一个元素wichich deos不存在listB?我可以使用foreach循环,但我想知道我是否可以使用LINQ来做到这一点

cad*_*ll0 87

listA.Except(listB) 会给你listA中不在listB中的所有项目

  • 是的,它将这样做。但是,由于这是基于集合的操作,因此值得记住的是,结果列表还将删除ListA或ListB中存在的重复项。 (2认同)

SLa*_*aks 37

if (listA.Except(listB).Any())
Run Code Online (Sandbox Code Playgroud)


the*_*ric 14

listA.Any(_ => listB.Contains(_))
Run Code Online (Sandbox Code Playgroud)

:)

  • 这是最好的回答,因为@ cadrell0和SLaks提供的解决方案只检查A是否包含B的所有元素,但是如果B有更多不匹配的元素,则不会.这个解决方案在下面有效.答:[0,1,2,3]; B:[0,1,2,3,4]`listA.Except(listB).Any()== false``listA.Any(_ => listB.Contains(_))== true` (2认同)
  • @TomaszJuszczak是的,但是仅当A包含B中不包含的任何东西时才专门问这个问题-即,如果B包含A中不包含的东西,则**应该**判断为假,前提是A不含B中不包含的东西。不正确 (是的,我初读时误解了这个问题。) (2认同)

das*_*ght 8

你可以在一行中完成

var res = listA.Where(n => !listB.Contains(n));
Run Code Online (Sandbox Code Playgroud)

这不是最快的方法:如果listB相对较长,这应该更快:

var setB = new HashSet(listB);
var res = listA.Where(n => !setB.Contains(n));
Run Code Online (Sandbox Code Playgroud)


Jnr*_*Jnr 5

使用Any()获取两个列表的差异。如果满足条件, LinqAny()函数将返回布尔值,但您可以使用它返回两个列表的差异:

var difference = ListA.Where(a => !ListB.Any(b => b.ListItem == a.ListItem)).ToList();
Run Code Online (Sandbox Code Playgroud)