假設您有兩個IEnumerbale
對象。我們如何合併它們(在某些情況下,例如合併排序中的合併...)並創建一個唯一的IEnumerable
?我試着用Zip
,但在Zip中,兩個列表大小應該是相等的(也許你沒有例外,但也許我們有一些數據丟失)。 ..)。選擇(...)但我沒有得到可接受的結果。另外,我的問題與使用Union或this one完全不同,事實上,正如我在合併排序中所說的那樣,我喜歡保留列表順序(實際上只是想填補第一個列表中的一些空白)。如何使用LINQ執行合併排序?
用for循環處理它很容易,但是我看不到任何完整的linq方式。
編輯:
Sample input:
lst1 = {5,10,12}
lst2 = {7,9,16,20,25}
result: {5,7,9,10,12,16,20,25}
這可以用一個for循環和兩個指針來實現在O(n + m)
但我在O(n+m)
尋找LINQ解決方案循環的解決方案:
var lst1 = new List<int> { 5, 10, 12 };
var lst2 = new List<int> { 7, 9, 16, 20, 25 };
var result = new List<int>();
int j = 0;
for (int i = 0; i < lst1.Count; i++)
{
while (j < lst2.Count && lst2[j] < lst1[i])
{
result.Add(lst2[j]);
j++;
}
result.Add(lst1[i]);
}
while (j < lst2.Count)
{
result.Add(lst2[j]);
j++;
}
Console.WriteLine(string.Join(",", result.ToArray()));
請詳細說明一下。如果'Union'不適合你,我不知道你在找什麼。 –
你的聯盟後你不能做OrderBy嗎? – thekip
@John Saunders,假設最常見的問題,就像在這種情況下合併排序合併一樣,如果再次使用union,則應該調用OrderBy來合併結果,但它不適合mergesort情況。 –