LINQ - 输出列表B中包含的列表A中项目的真/假“核对表”

时间:2017-02-06 11:47:39

标签: c# linq list

我有两个清单:

List<string> list1 = new List<string>(){ "a", "b", "c", "d"  };

List<string> list2 = new List<string>(){ "b", "d", "e" };

我想查找list1中与list2中的项匹配的所有项,并生成包含以下内容的List list3:

{ false, true, false, true }

我怎么能这样做?

提前致谢, 波状

2 个答案:

答案 0 :(得分:7)

这就是全部:

list1.Select(str => list2.Contains(str)).ToList();

答案 1 :(得分:2)

@Balazs答案是正确的,但您应该知道列表上的Contains操作是O(n)操作。如果列表非常大,那么创建新列表将是O(n * m)操作,这可能非常慢。如果要检查某个值是否在其他值中,最好的方法是使用一些基于散列的结构,其中Contains运算具有O(1)。所以,只需将第二个列表值放入HashSet

即可
var hashSet = new HashSet<string>(list2);
var result = list1.Select(hashSet.Contains).ToList();