2008-11-25 14 views
171

digamos que usted tiene una:Lista de cadenas a una cadena

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

En este mundo funcional loco en el que vivimos en estos días, que uno de ellos sería el mejor para crear una cadena concatenando los siguientes:

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 Llanura foreach StringBuilder edad

o hay una mejor manera?

+7

Parece que .Net 4 también incluirá un string.join (cadena, IEnumerable ), lo que le permite saltar el ToArray() http://msdn.microsoft.com/en-us/library/dd783876.aspx – luke

Respuesta

233

Me gustaría ir con la opción A:

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

Mi razonamiento es debido a que el método de unión fue escrito para tal fin. De hecho, si miras Reflector, verás que se usó un código inseguro para optimizarlo realmente. Los otros dos también FUNCIONAN, pero creo que la función Unirme fue escrita para este propósito, y supongo que la más eficiente. Podría estar equivocado, aunque ...

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

String.Join(String.Empty, los); 
+0

GA! Ni siquiera vi esta opción al principio, leí enseguida. –

+0

Hice algunas pruebas y mostraron que esto era aproximadamente tres veces más rápido que StringBuilder, pero ambos eran mucho mejores que el agregado –

+1

3 veces más rápido que 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, está hecho en código inseguro usando punteros, así que ... tiene sentido. – BFree

4

Mi voto es string.join

No hay necesidad de evaluaciones lambda y funciones temporales que se crearán, menos llamadas a funciones, menos empuje de pila y reventado.

7

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 cuerdas!" Siempre guay.

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

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

15

Si utiliza .NET 4.0 se puede utilizar de manera clasificador:

String.Join<string>(String.Empty, los); 
5
los.Aggregate((current, next) => current + "," + next); 
Cuestiones relacionadas