2011-12-21 20 views
61

¿Existe una forma rápida de convertir List<string> en un string con comas en C#?Convierte `List <string>` a una cadena separada por comas

Lo hago así pero ¿Tal vez hay una manera más rápida o más eficiente?

List<string> ls = new List<string>(); 
ls.Add("one"); 
ls.Add("two"); 
string type = string.Join(",", ls.ToArray()); 

PS: Se buscó en este sitio, pero la mayoría de las soluciones son para Java o Python

+2

No, lo estás haciendo bien. Aunque no creo que deba hacer 'ToArray()'. – Yuck

+2

¿Más rápido de escribir o más rápido de ejecutar? –

+0

Ambos :), Pero aparentemente no es posible – Ozkan

Respuesta

98

En .NET 4 no necesitan que la llamada ToArray() - string.Join is overloaded aceptar IEnumerable<T> o simplemente IEnumerable<string>.

Existen formas potencialmente más eficientes de hacerlo antes de .NET 4, pero ¿realmente las necesita? ¿Es esto realmente un cuello de botella en tu código?

Usted podría iterar sobre la lista, calcular el tamaño final, asignar una StringBuilder de exactamente el tamaño correcto, entonces la unión sí mismo. Eso evitaría la matriz extra que se está construyendo por una pequeña razón, pero no ahorraría mucho tiempo y sería un lote más código.

+12

Pero a los desarrolladores se les paga en LOC, ¿verdad? ... ¿verdad? – Yuck

+11

cadena.Join (",", myList) – Mahesh

0

Esa es la manera en que yo preferiría ver si mantenía su código. Si logras encontrar una solución más rápida, va a ser muy esotérica, y realmente deberías enterrarla dentro de un método que describa lo que hace.

(¿todavía funciona sin ToArray)?

+1

Puedo hacer 'string.Join' solo en' Array''s of 'strings'. Entonces es necesario (porque no uso '.NET 4' – Ozkan

13

Lo siguiente dará como resultado una lista separada por comas. Asegúrese de incluir una declaración utilizando para System.Linq

List<string> ls = new List<string>(); 
ls.Add("one"); 
ls.Add("two"); 
string type = ls.Aggregate((x,y) => x + "," + y); 

producirá una, dos

si necesita un espacio después de la coma, basta con modificar la última línea a string type = ls.Aggregate((x,y) => x + ", " + y);

+0

¿El tiempo de ejecución es más rápido que el código que escribí? – Ozkan

+0

@Ozkan Por favor pruébelo y háganos saber. –

+0

en realidad, no había verificado. Con solo los dos elementos en la Lista, no, son igual de rápidos, pero lo explotan en 100.000 elementos, el Agregado en realidad es mucho más lento que la cadena. Unirse. Es bueno saberlo, supongo. He preferido agregar en el pasado, pero creo que me moveré a la cadena. Únete en el futuro –

3

Siga este:

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

     name.Add("Latif"); 

     name.Add("Ram"); 

     name.Add("Adam"); 
     string nameOfString = (string.Join(",", name.Select(x => x.ToString()).ToArray())); 
8

para ampliar sobre Jon Skeets responder el código para esto en .Net 4 es:

string myCommaSeperatedString = string.Join(",",ls); 
0
static void Main(string[] args) 
{ 
    List<string> listStrings = new List<string>(){ "C#", "Asp.Net", "SQL Server", "PHP", "Angular"}; 
    string CommaSeparateString = GenerateCommaSeparateStringFromList(listStrings); 
    Console.Write(CommaSeparateString); 
    Console.ReadKey(); 
} 

private static string GenerateCommaSeparateStringFromList(List<string> listStrings) 
{ 
    return String.Join(",", listStrings); 
} 

Convert a list of string to comma separated string C#.

+0

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre cómo y/o por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta. Lea este [cómo-para-responder] (http://stackoverflow.com/help/how-to-answer) para proporcionar una respuesta de calidad. – thewaywewere

Cuestiones relacionadas