采用 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()) - 它现在可以工作了。
虽然,这是一个解决方法......
答案 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)));