我有两个列表:
List<string> _list1;
List<string> _list2;
我需要在_list1中添加所有不同的_list2项...
我该如何使用LINQ实现这个功能?
谢谢
IEnumerable<T>.Union
方法:var _list1 = new List<string>(new[] { "one", "two", "three", "four" });
var _list2 = new List<string>(new[] { "three", "four", "five" });
_list1 = _list1.Union(_list2);
// _distinctItems now contains one, two, three, four, five
编辑
您也可以使用其他帖子使用的方法:
_list1.AddRange(_list2.Where(i => !_list1.Contains(i));
这两种方法都会增加额外的开销。
第一种方法使用一个新的List来存储Union结果(然后将它们赋值回到_list1
)。
第二种方法将创建一个内存中的Where表示,并将其添加到原始List中。
选择你的毒药。在我看来,Union使代码更清晰一些(因此值得额外的开销,至少在你能证明它成为问题之前)。
// Add all items from list2 except those already in list1
list1.AddRange(list2.Except(list1));
_list1.AddRange( _list2.Where(x => !_list1.Contains(x) ) );
HashSet<T>
中,然后测试第二个列表中每个项的成员资格 - 这种方法在较长列表的长度上是线性的。这就是为什么使用 Union 和 Except 更有效率的原因。 - Lee