Lista de strings para uma string


206

Digamos que você tenha um:

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

Neste mundo funcional maluco que vivemos atualmente, qual seria o melhor para criar uma string concatenando:

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

foreach StringBuilder antigo simples ou

Ou há um modo melhor?


9
Looks como .Net 4 também irá incluir uma String.Join (string, IEnumerable <string>), permitindo que você pule o ToArray () msdn.microsoft.com/en-us/library/dd783876.aspx
luke

Respostas:


289

Eu iria com a opção A:

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

Meu raciocínio é que o método Join foi escrito para esse fim. De fato, se você olhar para o Reflector, verá que o código não seguro foi usado para realmente otimizá-lo. Os outros dois também TRABALHAM, mas acho que a função Join foi escrita para esse fim e, eu acho, a mais eficiente. Eu poderia estar errado ...

Conforme @Nuri YILMAZ sem .ToArray(), mas este é o .NET 4+:

String.Join(String.Empty, los);

GA! Eu nem vi essa opção na primeira leitura depois dela.
Joel Coehoorn

2
3 vezes mais rápido que o StringBuilder? Uau, imaginei que seria mais rápido, não percebi o quanto mais rápido. Faz sentido, porém, é feito em código não seguro usando ponteiros, então ..... faz sentido.
BFree

8
legais! única observação: Join não precisa de los.ToArray (), porque List <T> pode converter IEnumarable <T>.
Nuri YILMAZ 10/03

8
@Nuri: Esta pergunta foi feita em 08, antes do .Net 4 ser lançado. A sobrecarga que IEnumerable <T> foi adicionado em .Net 4.
BFree

2
String.Join em conjunto com String.Concat é dourado. Ex: 'String.Concat ("{", String.Join (",", m_Data), "}"));'
KornMuffin 21/10

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

Se você quiser concatenar as strings, use string.Concat () em vez de string.Join ().


18

Se você usa o .net 4.0, pode usar uma maneira classificadora:

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

10

String.Join () é implementado rapidamente, e como você já tem uma coleção das seqüências em questão, é provavelmente a melhor opção. Acima de tudo, grita "Estou entrando em uma lista de strings!" Sempre bom.


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

5

Meu voto é string.

Não há necessidade de avaliações lambda e funções temporárias a serem criadas, menos chamadas de função, menos empilhamento e popping de pilha.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.