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