如果我有类型字符串(或任何其他类型)的两个列表,什么是连接两个列表的快速方法?
顺序应该保持不变。应该删除重复的内容(尽管两个链接中的每一项都是唯一的)。当我在谷歌上搜索的时候,我并没有找到太多关于这方面的信息,也不想为了加快交付速度而实现任何。net接口。
如果我有类型字符串(或任何其他类型)的两个列表,什么是连接两个列表的快速方法?
顺序应该保持不变。应该删除重复的内容(尽管两个链接中的每一项都是唯一的)。当我在谷歌上搜索的时候,我并没有找到太多关于这方面的信息,也不想为了加快交付速度而实现任何。net接口。
当前回答
空间开销最小的方法是使用Concat扩展方法。
var combined = list1.Concat(list2);
它创建了IEnumerable<T>的实例,该实例将按顺序枚举list1和list2的元素。
其他回答
var bigList = new List<int> { 1, 2, 3 }
.Concat(new List<int> { 4, 5, 6 })
.ToList(); /// yields { 1, 2, 3, 4, 5, 6 }
就像这样:
firstList.AddRange (secondList);
或者,你可以使用System.Linq中定义的“Union”扩展方法。 使用'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
AddRange方法
aList.AddRange( anotherList );
空间开销最小的方法是使用Concat扩展方法。
var combined = list1.Concat(list2);
它创建了IEnumerable<T>的实例,该实例将按顺序枚举list1和list2的元素。
你可以试试:
List<string> a = new List<string>();
List<string> b = new List<string>();
a.AddRange(b);
AddRange的MSDN页面
这保留了列表的顺序,但没有删除任何重复项(Union会这样做)。
这确实会改变列表a。如果你想保留原始列表,那么你应该使用Concat(正如在其他答案中指出的那样):
var newList = a.Concat(b);
只要a不为空,就返回一个IEnumerable。