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

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


当前回答

你可以试试:

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。

其他回答

var bigList = new List<int> { 1, 2, 3 }
    .Concat(new List<int> { 4, 5, 6 })
    .ToList(); /// yields { 1, 2, 3, 4, 5, 6 }

如果两个列表中都有一些项目,你可以使用

var all = list1.Concat(list2).Concat(list3) ... Concat(listN).Distinct().ToList();

Union方法可能满足您的需求。你没有说明订单还是副本是重要的。

取两个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 } 
targetList = list1.Concat(list2).ToList();

我想它运行得很好。如前所述,Concat返回一个新的序列,在将结果转换为List时,它完美地完成了工作。使用AddRange方法时,隐式转换有时可能会失败。

你可以试试:

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。