如果我有两个类型字符串列表(或任何其他类型),加入这两个列表的快速方法是什么?
订单应该保持不变.应删除重复项(尽管两个链接中的每个项都是唯一的).我在google搜索时并没有发现太多,并且不想实现任何.NET接口以提高传输速度.
Chr*_*isF 528
你可以尝试:
List<string> a = new List<string>();
List<string> b = new List<string>();
a.AddRange(b);
Run Code Online (Sandbox Code Playgroud)
这样可以保留列表的顺序,但不会删除任何重复的列表Union.
这确实改变了清单a.如果你想保留原始列表,那么你应该使用Concat(如其他答案中所指出的):
var newList = a.Concat(b);
Run Code Online (Sandbox Code Playgroud)
IEnumerable只要a不为null ,就返回一个.
Jar*_*Par 104
空间开销最小的方法是使用Concat扩展方法.
var combined = list1.Concat(list2);
Run Code Online (Sandbox Code Playgroud)
它创建一个实例IEnumerable<T>,它将按顺序枚举list1和list2的元素.
Lar*_*nal 41
该联盟的方法可能会满足您的需求.您没有指定订单或重复项是否重要.
拿两个IEnumerables并执行一个联合,如下所示:
int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 };
int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 };
IEnumerable<int> union = ints1.Union(ints2);
// yields { 5, 3, 9, 7, 8, 6, 4, 1, 0 }
Run Code Online (Sandbox Code Playgroud)
Fre*_*els 24
像这样的东西:
firstList.AddRange (secondList);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用System.Linq中定义的"Union"扩展方法.使用"联合",您还可以指定比较器,该比较器可用于指定项目是否应该联合.
像这样:
List<int> one = new List<int> { 1, 2, 3, 4, 5 };
List<int> second=new List<int> { 1, 2, 5, 6 };
var result = one.Union (second, new EqComparer ());
foreach( int x in result )
{
Console.WriteLine (x);
}
Console.ReadLine ();
#region IEqualityComparer<int> Members
public class EqComparer : IEqualityComparer<int>
{
public bool Equals( int x, int y )
{
return x == y;
}
public int GetHashCode( int obj )
{
return obj.GetHashCode ();
}
}
#endregion
Run Code Online (Sandbox Code Playgroud)
Bal*_*i M 16
targetList = list1.Concat(list2).ToList();
Run Code Online (Sandbox Code Playgroud)
我认为这样做很好.如前所述,Concat返回一个新序列,在将结果转换为List时,它可以完美地完成工作.使用AddRange方法时,隐式转换有时可能会失败.
jim*_*zer 13
如果两个列表中都存在某些项目,您可以使用
var all = list1.Concat(list2).Concat(list3) ... Concat(listN).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
var bigList = new List<int> { 1, 2, 3 }
.Concat(new List<int> { 4, 5, 6 })
.ToList(); /// yields { 1, 2, 3, 4, 5, 6 }
Run Code Online (Sandbox Code Playgroud)