2016-02-15 90 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