Предположим, у вас есть два IEnumerbale
объекта. Как мы можем объединить их (в некоторых условиях, например, объединить в сортировку слиянием ...) и создать уникальный IEnumerable
? Я пробовал это с Zip
, но в Zip два размера списка должны быть равны (возможно, вы не получили исключение, но, возможно, у нас потерялись некоторые данные.)
Кроме того, я пробую это с помощью Enumerable.Range (...). Выберите (...), но я не получил приемлемый результат.
Кроме того, мой вопрос полностью отличается от использования Union или этого , на самом деле, как я сказал, вроде слияния в сортировке слиянием, мне нравится сохранять порядок списков (на самом деле просто хочу сначала заполнить несколько пробелов список).
С циклом for легко справиться, но я не вижу полного пути linq.
Edit:
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)
, но я ищу решение linq в O(n+m)
для петлевого решения:
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()));