Liste des chaînes en une chaîne


206

Disons que vous avez:

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

Dans ce monde fonctionnel fou, nous vivons en ces jours où l'un d'eux serait le meilleur pour créer une chaîne en concaténant ceux-ci:

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);

ou Plain vieux StringBuilder foreach

OU existe-t-il une meilleure façon?


9
On dirait .Net 4 comprendra également un string.join (string, IEnumerable <string>), vous permettant de passer la ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
luke

Réponses:


289

J'irais avec l'option A:

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

Mon raisonnement est que la méthode Join a été écrite à cet effet. En fait, si vous regardez Reflector, vous verrez que du code dangereux a été utilisé pour vraiment l'optimiser. Les deux autres fonctionnent également, mais je pense que la fonction Join a été écrite à cet effet, et je suppose que c'est la plus efficace. Je pourrais toutefois avoir tord...

Selon @Nuri YILMAZ sans .ToArray(), mais c'est .NET 4+:

String.Join(String.Empty, los);

GÉORGIE! Je n'ai même pas vu cette option au premier abord - lisez juste à côté.
Joel Coehoorn

2
3 fois plus rapide que le StringBuilder? Wow, je pensais que ce serait plus rapide, je ne savais pas à quel point plus rapide. Cela a du sens cependant, cela se fait dans du code non sécurisé à l'aide de pointeurs, donc ..... est logique.
BFree

8
agréable! seule remarque: Join n'a pas besoin de los.ToArray (), car List <T> peut transtyper IEnumarable <T>.
Nuri YILMAZ

8
@Nuri: Cette question a été posée en 08, avant la sortie de .Net 4. La surcharge qui prend IEnumerable <T> a été ajoutée dans .Net 4.
BFree

2
String.Join en conjonction avec String.Concat est doré. Ex: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin

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

Si vous souhaitez simplement concaténer les chaînes, utilisez string.Concat () au lieu de string.Join ().


18

Si vous utilisez .net 4.0, vous pouvez utiliser une méthode de tri:

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

10

String.Join () est implémenté assez rapidement, et comme vous avez déjà une collection des chaînes en question, est probablement le meilleur choix. Surtout, il crie "Je rejoins une liste de chaînes!" Toujours sympa.



5

Mon vote est une chaîne.

Pas besoin de créer des évaluations lambda et des fonctions temporaires, moins d'appels de fonction, moins de push et popping de pile.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.