Lista de C # <string> para string com delimitador


631

Existe uma função no C # para converter rapidamente alguma coleção em string e separar valores com delimitador?

Por exemplo:

List<string> names -> string names_together = "John, Anna, Monica"

Respostas:


1201

Você pode usar String.Join. Se você tiver um List<string>, pode ligar ToArrayprimeiro:

List<string> names = new List<string>() { "John", "Anna", "Monica" };
var result = String.Join(", ", names.ToArray());

No .NET 4, você não precisa ToArraymais, pois há uma sobrecarga String.Joindisso IEnumerable<string>.

Resultados:


John, Anna, Monica


95

Você também pode fazer isso com o linq, se desejar

var names = new List<string>() { "John", "Anna", "Monica" };
var joinedNames = names.Aggregate((a, b) => a + ", " + b);

Embora eu prefira a sintaxe não-linq na resposta do Quartermeister e acho que Aggregatepode executar mais devagar (provavelmente mais operações de concatenação de cadeias).


19
Obrigado pelas respostas rápidas, ambas funcionam bem. Você está certo, fiz uma pequena medição de desempenho usando a classe Stopwatch e o linq-way é muito mais lento: String.Join (",", names.ToArray ()); -> pegou 18 ticks Agregado ((a, b) => a + "," + b) -> pegou 736 ticks
nan

2
Sim, eu acho que Aggregateé melhor para operações do tipo Math. Com strings, esta operação é semelhante a for eaching e apenas é anexada a uma string que é muito lenta em ineficiente, porque você está criando uma nova string para cada item que existe na lista.
26410 Bob

Observe que Agregar sem um valor inicial lançará uma InvalidOperationException se o contêiner estiver vazio. Use a versão agregada Aggregate (seed, func) para evitar código de manipulação de erros ou verificações condicionais. String.Join não joga vazio, portanto, nenhuma semente ou código extra é necessário ... além disso, não requer Linq e a sintaxe é um pouco mais clara.
Huacanacha 25/11

1
A agregação no exemplo acima pode funcionar mais rápido se você usar o StringBuilder. O uso de '+' para executar concatenação múltipla não é recomendado. Consulte a seção Comentários aqui ( msdn.microsoft.com/en-us/library/… )
Ilya Denisov
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.