Elenco di stringhe su una stringa


206

Diciamo che hai un:

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

In questo pazzo mondo funzionale viviamo in questi giorni quale di questi sarebbe il migliore per creare una stringa concatenandoli:

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 Plain vecchio StringBuilder foreach

O c'è un modo migliore?


9
Sembra che .Net 4 includerà anche una stringa.Join (stringa, IEnumerable <string>), che consente di saltare ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
luke

Risposte:


289

Vorrei andare con l'opzione A:

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

Il mio ragionamento è perché il metodo Join è stato scritto a tale scopo. In effetti, se guardi Reflector, vedrai che il codice non sicuro è stato usato per ottimizzarlo davvero. Anche gli altri due funzionano, ma penso che la funzione Join sia stata scritta per questo scopo, e immagino che sia la più efficiente. Potrei sbagliarmi però...

Secondo @Nuri YILMAZ senza .ToArray(), ma questo è .NET 4+:

String.Join(String.Empty, los);

GA! A prima vista non ho nemmeno visto questa opzione.
Joel Coehoorn,

2
3 volte più veloce di StringBuilder? Wow, ho pensato che sarebbe stato più veloce, non mi sono reso conto di quanto più veloce. Ha senso però, è fatto in codice non sicuro usando i puntatori, quindi ..... ha senso.
BFree

8
simpatico! unica osservazione: Join non ha bisogno di los.ToArray (), poiché List <T> può trasmettere IEnumarable <T>.
Nuri YILMAZ,

8
@Nuri: questa domanda è stata posta in 08, prima che .Net 4 uscisse. Il sovraccarico che richiede IEnumerable <T> è stato aggiunto in .Net 4.
BFree

2
String.Join in collaborazione con String.Concat è d'oro. Esempio: 'String.Concat ("{", String.Join (",", m_Data), "}");'
KornMuffin,

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

Se si desidera semplicemente concatenare le stringhe, utilizzare string.Concat () anziché string.Join ().


18

Se si utilizza .net 4.0 è possibile utilizzare un modo selezionatore:

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

10

String.Join () è implementato abbastanza velocemente e, dato che hai già una raccolta di stringhe in questione, è probabilmente la scelta migliore. Soprattutto, grida "Mi sto unendo a un elenco di stringhe!" Sempre carino.


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

5

Il mio voto è stringa

Non è necessario creare valutazioni lambda e funzioni temporanee, meno chiamate di funzioni, meno push e popping dello stack.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.