Supposons que vous avez deux objets IEnumerbale
. Comment pouvons-nous les fusionner (dans certaines conditions, par exemple, fusionner dans un tri par fusion ...) et créer un IEnumerable
unique? J'ai essayé ceci avec Zip
, mais dans Zip les deux tailles de liste devraient être égales (peut-être vous n'avez pas eu l'exception mais peut-être nous avons quelques données perdues.)Comment effectuer un tri de fusion à l'aide de LINQ?
En outre, je l'essaie en utilisant Enumerable.Range (. ..). Sélectionnez (...) mais je n'ai pas obtenu un résultat acceptable. En outre, ma question est totalement différente de l'utilisation de Union ou this one, en fait, comme je l'ai dit comme fusion dans le tri de fusion, j'aime préserver l'ordre des listes (en fait, je veux juste combler certaines lacunes dans la première liste).
Il est facile de le gérer avec une boucle for, mais je ne vois pas de chemin linq complet.
Edit:
Sample input:
lst1 = {5,10,12}
lst2 = {7,9,16,20,25}
result: {5,7,9,10,12,16,20,25}
cela peut se faire avec une boucle et deux pointeur dans O(n + m)
mais je suis à la recherche d'une solution LINQ dans O(n+m)
pour la solution de boucle:
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()));
Veuillez donner quelques détails. Je n'ai aucune idée de ce que vous cherchez si 'Union' ne fonctionnera pas pour vous. –
Vous ne pouvez pas faire un OrderBy après votre union? – thekip
@John Saunders, supposons le problème le plus commun, fusionner comme fusionner dans le tri de fusion dans ce cas si vous utilisez à nouveau union vous devriez appeler OrderBy pour avoir un résultat de fusion, mais ce n'est pas approprié dans le cas de fusion. –