unir two lists listas concatenar combine combinar .net linq data-structures

.net - two - unir dos listas c#



¿Cómo fusionar varias matrices en una lista usando Linq? (3)

Para cualquier combinación más compleja de IEnumerable , GetEnumerator y el yield son tus amigos y tienen un desempeño IEnumerable . Solo por diversión , aquí hay un código que muestra que extender Linq con sus propios métodos personalizados no tiene por qué ser aterrador;

public static class MyLinqExtensions { public static IEnumerable<int> RoundRobin(this IEnumerable<int> a, IEnumerable<int> b) { var ae = a.GetEnumerator(); var be = b.GetEnumerator(); bool aHasNumber = ae.MoveNext(); bool bHasNumber = be.MoveNext(); while (aHasNumber || bHasNumber) { if (aHasNumber) { yield return ae.Current; aHasNumber = ae.MoveNext(); } if (bHasNumber) { yield return be.Current; bHasNumber = be.MoveNext(); } } } } void Main() { var arr1 = new[] { 1, 2, 3, 4 }; var arr2 = new[] { 4, 5, 6 }; var arr3 = new[] { 7, 8, 9}; var arr4 = new int[] { }; // arrays the same size Assert.AreEqual(new[] { 4, 7, 5, 8, 6, 9 }, arr2.RoundRobin(arr3).ToArray()); // array 1 bigger than array 2 Assert.AreEqual(new[] { 1, 4, 2, 5, 3, 6, 4 }, arr1.RoundRobin(arr2).ToArray()); // array 1 smaller than 2 Assert.AreEqual(new[] { 4, 1, 5, 2, 6, 3, 4 }, arr2.RoundRobin(arr1).ToArray()); // 2 empty, 1 not Assert.AreEqual(new[] { 4, 5, 6 }, arr2.RoundRobin(new int[] { }).ToArray()); // 1 empty, 2 not Assert.AreEqual(new[] { 1, 2, 3, 4 }, arr1.RoundRobin(new int[] { }).ToArray()); // both empty Assert.AreEqual(new int[] { }, arr4.RoundRobin(arr4).ToArray()); // prove it''s Linq Assert.AreEqual(new[] { 1, 4, 2}, arr1.RoundRobin(arr2).Take(3).ToArray()); Console.WriteLine("pass"); }

Tengo la List<Product[]> y necesito unirlos en un Product[] .


Puedes usar SelectMany y luego ToArray para hacer esto.

var result = source.SelectMany(i => i).ToArray();


También puede utilizar el método de extensión .Concat() y luego .ToArray() : x.Concat(y).Concat(z).ToArray();