2016-02-15 92 views
-1

我有两个已排序的List<int>,我如何有效地将它们合并到一个排序列表中?合并排序列表<int>

例如:

List<int> a = new List<int>() {1, 2, 3}; 
List<int> b = new List<int>() {1, 4, 5}; 
List<int> aAndB = ....? 

我想,我的aAndB名单OT样子:{1, 1, 2, 3, 4, 5}

+0

提防那些需要你的名单重新排序的答案。 ;) –

+1

@HimBromBeere,完全同意你的看法。我上周也看到类似的问题,所以OP在提出这样一个小问题之前应该做一点研究。 – Alex

回答

0

您可以使用ConcatAddRange合并两个列表如下:

List<int> a = new List<int>() {1, 2, 3}; 
List<int> b = new List<int>() {1, 4, 5}; 

//using Concat 
List<int> aAndB = a.Concat(b).OrderBy(x => x).ToList(); 

//using AddRange 
aAndB = new List<int>(a).AddRange(b).Sort(); 
+2

联合会删除重复项。 – Habib

+0

确实,没有正确地读取这个问题 – Peroxy

+2

'AddRange'不返回一个列表或任何东西,所以你不能链'OrderBy' – Habib

0

你需要ConcatOrder这些列表如:

List<int> aAndB = a.Concat(b).OrderBy(r=> r).ToList(); 

另一种方式做同样的List<T>是使用AddRangeSort方法可在List<T>,如:

List<int> a = new List<int>() { 1, 2, 3 }; 
List<int> b = new List<int>() { 1, 4, 5 }; 
List<int> aAndB = new List<int>(a); 
aAndB.AddRange(b); 
aAndB.Sort(); 
+0

你正在创建一个新列表'a',然后添加列表'a'的范围,你应该使用列表'b' :-) – Peroxy

+0

@Peroxy,不太确定如果操作员想保持原始列表完好无损 – Habib

+0

您没有正确阅读我的评论。你创建一个列表“aAndB”,它等于列表“a”。然后,当你应该添加列表'b'的范围时,再次添加范围'a'。应该是'aAndB.AddRange(b)'而不是'aAndB.AddRange(a)'。 – Peroxy