Actualmente estoy experimentando un poco con LINQ. Digamos que tengo dos colecciones de idéntica longitud:combinación entrelazada con LINQ?
var first = new string[] { "1", "2", "3" };
var second = new string[] { "a", "b", "c" };
me gustaría fusionar esas dos colecciones en una sola, pero de forma intercalada. La secuencia resultante debe por lo tanto ser:
"1", "a", "2", "b", "3", "c"
Lo que he encontrado hasta el momento es una combinación de Zip
, un tipo anónimo y SelectMany
:
var result = first.Zip(second, (f, s) => new { F = f, S = s })
.SelectMany(fs => new string[] { fs.F, fs.S });
¿Alguien sabe de un suplente/sencillo forma de lograr una fusión intercalada con LINQ?
Sin duda una buena solución en cuanto a la capacidad de reutilización y legibilidad. – TeaWolf
Creo que si la primera colección es más grande, este código todavía los devolverá a todos, sin embargo, si la segunda colección es más grande, se saltearía. Tal vez vale la pena continuar a través de la segunda colección después del ciclo while para coherencia :-) –
@Danny, sí. Mi preferencia sería detener una vez que se agota el tiempo más corto, entonces no tiene que preocuparse por cómo llenar los vacíos.(Normalmente no pondría el código de otras personas en mis respuestas, pero dejaré la edición de ChaosPandion solo con el código de Jiri.) – Douglas