Lista de cadenas a una cadena


206

Digamos que tienes un:

List<string> los = new List<string>();

En este loco mundo funcional, vivimos en estos días cuál de estos sería el mejor para crear una cadena concatenando estos:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);

o llano viejo StringBuilder

¿O hay un mejor camino?


9
Se parece a .Net 4 también incluirán un string.join (cadena, IEnumerable <string>), lo que le permite saltar el ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
Lucas

Respuestas:


289

Yo iría con la opción A:

String.Join(String.Empty, los.ToArray());

Mi razonamiento es porque el método Join fue escrito para ese propósito. De hecho, si observa Reflector, verá que se utilizó un código inseguro para optimizarlo realmente. Los otros dos también FUNCIONAN, pero creo que la función Unir se escribió para este propósito, y supongo que es la más eficiente. Aunque podría estar equivocado ...

Según @Nuri YILMAZ sin .ToArray(), pero esto es .NET 4+:

String.Join(String.Empty, los);

¡GEORGIA! Ni siquiera vi esta opción en primera lectura, más allá de ella.
Joel Coehoorn el

2
¿3 veces más rápido que el StringBuilder? Wow, pensé que sería más rápido, no me di cuenta de cuánto más rápido. Sin embargo, tiene sentido, se hace en código inseguro utilizando punteros, así que ... tiene sentido.
BFree

8
¡bonito! solo comentario: Join no necesita los.ToArray (), porque List <T> puede emitir IEnumarable <T>.
Nuri YILMAZ

8
@Nuri: Esta pregunta se hizo en 08, antes de que .Net 4 saliera. La sobrecarga que toma IEnumerable <T> se agregó en .Net 4.
BFree

2
String.Join junto con String.Concat es dorado. Por ejemplo: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin

51
string.Concat(los.ToArray());

Si solo desea concatenar las cadenas, use string.Concat () en lugar de string.Join ().


18

Si usa .net 4.0 puede usar un clasificador:

String.Join<string>(String.Empty, los);

10

String.Join () se implementa bastante rápido, y como ya tiene una colección de las cadenas en cuestión, es probablemente la mejor opción. Sobre todo, grita "¡Me estoy uniendo a una lista de cadenas!" Siempre guay.


7
los.Aggregate((current, next) => current + "," + next);

5

Mi voto es una cuerda.

No es necesario crear evaluaciones lambda y funciones temporales, menos llamadas a funciones, menos empuje de pila y popping.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.