使用LINQ在两个数组问题中获取常见值

Raj*_*mar 5 c# linq arrays winforms

我有两个阵列说

var list1 = string[] {"1", "2", "3", "4", "", ""};
var list2 = string[] {"2", "3", "4","",""};
Run Code Online (Sandbox Code Playgroud)

当我尝试使用以下代码从这两个数组中获取常见项目

 var listCommon = list1.Intersect(list2);
Run Code Online (Sandbox Code Playgroud)

它给了我这样的结果

string[] {"2", "3", "4", ""}
Run Code Online (Sandbox Code Playgroud)

但我希望它应该像这样返回

string[] {"2", "3", "4", "", ""}
Run Code Online (Sandbox Code Playgroud)

它在交叉时转义为最后一个空字符串值.

Tim*_*ter 9

设置类似的方法IntersectExcept从每个集合中删除重复项.我假设你想要这样的东西:

var listCommon = list1.Where(list2.Contains);
Run Code Online (Sandbox Code Playgroud)

这不是那么有效.这可能是一个优化:

var l2Lookup = new HashSet<string>(list2);
var listCommon = list1.Where(l2Lookup.Contains);
Run Code Online (Sandbox Code Playgroud)


Ana*_*ion 7

这将有效:

list1.Where(x=>list2.Contains(x))
Run Code Online (Sandbox Code Playgroud)