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?

maxfridbe
la source
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);
BFree
la source
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 ().

Pent Ploompuu
la source
18

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

String.Join<string>(String.Empty, los);
mnieto
la source
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.

J Cooper
la source
7
los.Aggregate((current, next) => current + "," + next);
landrady
la source
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.

Tom Ritter
la source