如果我有类型字符串(或任何其他类型)的两个列表,什么是连接两个列表的快速方法?

顺序应该保持不变。应该删除重复的内容(尽管两个链接中的每一项都是唯一的)。当我在谷歌上搜索的时候,我并没有找到太多关于这方面的信息,也不想为了加快交付速度而实现任何。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。