C#:加入两个列表,不包括重复项

时间:2012-04-16 04:19:35

标签: c# list join concat

采用 List2 并将其添加到 List1 末尾的简单有效方法是什么 - 但是只有那些不<< / strong>在连接之前已经在 List1 中 - 将被添加到它?

修改 我一直在尝试在答案中建议的方法,但我仍然得到添加到List1的欺骗!
这是一个代码示例:

// Assume the existence of a class definition for 'TheObject' which contains some 
// strings and some numbers.

string[] keywords = {"another", "another", "another"};
List<TheObject> tempList = new List<TheObject>();
List<TheObject> globalList = new List<TheObject>();

foreach (string keyword in keywords)
{
    tempList = // code that returns a list of relevant TheObject(s) according to
               // this iteration's keyword.
    globalList = globalList.Union<TheObject>(tempList).ToList();
}

调试时 - 在第二次迭代后 - globalList包含TheObject完全相同对象的两个副本。当我尝试实施Edward Brey的解决方案时也会发生同样的事情......

EDIT2:
我修改了返回新tempList的代码,还检查返回的项是否已经在globalList中(通过执行!globalList.contains()) - 它现在可以工作了。
虽然,这是一个解决方法......

3 个答案:

答案 0 :(得分:4)

List1.Union(list2)。有关更多示例,请转到http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b

答案 1 :(得分:2)

您可以使用List的联合方法,如

List1.Union(list2);

答案 2 :(得分:1)

如果List1的所有项目都不同,LINQ的Union将起作用。否则,为了更精确地满足规定的目标,不需要O(m * n)搜索时间,您可以使用哈希集(将T替换为列表类型):

var intersection = new HashSet<T>(List1.Intersect(List2));
List1.AddRange(List2.Where(item => !intersection.Contains(item)));