Permite utilizar Aggregate
para el gusto de hacerlo (y también, para demostrar esto se puede hacer como una única expresión):
"AAAA,12,BBBB,34,CCCC,56".Split(',').Aggregate(
new { Uneven = new List<string>(), Even = new List<string>() },
(seed, s) => {
if (seed.Uneven.Count > seed.Even.Count)
seed.Even.Add(s);
else
seed.Uneven.Add(s);
return seed;
});
según LINQPad, el resultado es la siguiente:
Por supuesto que probablemente no lo haría de esta manera, ya que es algo difícil de leer. Y la prueba para la cual lista para anexar es, bueno, no es bueno.
Pero al menos ahora tenemos otro ejemplo de lambda declaraciones - normalmente la literatura LINQ intenta olvidarlas (probablemente porque no funcionarán con SQL o cualquier otro programa que utilice árboles de expresiones).
Una ventaja de este método en comparación con las soluciones de limpieza anteriores es que esto solo hace que una pase por la lista. Sin embargo, dado que estamos dividiendo una cadena, trataría de optimizar en otro lugar;) ¿No sería genial un IEnumerable<string> Split(this string self, string boundary)
?
¿Cuál es la división de la cadena basada en? Posición en la lista, número de caracteres, etc.? –
Sí, es la posición en la lista –
'Me gustaría evitar el bucle '¿Te das cuenta de que cualquier solución de LINQ que elijas, de hecho, usará al menos un bucle? –