2010-12-23 14 views
14

Necesito una manera fácil de convertir un List<int> en una matriz string.Cómo convertir la lista <int> en una cadena []?

que tengo:

var the_list = new List<int>(); 
the_list.Add(1); 
the_list.Add(2); 
the_list.Add(3); 

string[] the_array = new string[the_list.Count]; 
for(var i = 0 ; i < the_array.Count; ++i) 
    the_array[i] = the_list[i].ToString(); 

... lo que parece ser muy feo para mí.

¿Hay alguna manera más fácil?


Nota: Estoy buscando una manera más fácil - no necesariamente una forma más rápida.

+0

Parece que hace dos preguntas diferentes: qué es más eficiente y cuál es más fácil. OMI, las respuestas a estas dos preguntas son diferentes :) –

+0

@Brian: Estoy preguntando qué es más fácil, disculpa la confusión. –

+0

Esa es la forma más eficiente, a menos que tuviera muchos elementos repetidos en la matriz. Eso no significa que sea necesariamente la forma más fácil, por supuesto. –

Respuesta

44

uso de LINQ:

string[] the_array = the_list.Select(i => i.ToString()).ToArray(); 
+0

¡Eso fue rápido! Gracias. –

+6

Respuesta rápida Sí, pero lamentablemente el código no es rápido. –

+0

Nota: Aunque ciertamente elegiría el enfoque Select.ToArray presentado aquí, no es probable que sea más rápido que lo que ya tiene. Tu camino es sencillo y probablemente la forma más eficiente. De nuevo. Elijo el enfoque más fácil de leer/mantener de Select.ToArray (LINQ) que sugiere @Etienne de Martel, pero su pregunta sugería que su opción era ineficiente. –

4

Lo sentimos, no tengo .NET instalado en esta máquina, así que totalmente no probado:

var theList = new List<int>() { 1, 2, 3 }; 

var theArray = theList.Select(e => e.ToString()).ToArray();  // Lambda Form 
var theArray = (from e in theList select e.ToString()).ToArray(); // Query Form 
2

Lista tiene un método ToArray(). Le ahorrará escribir pero probablemente no será más eficiente.

+3

Tampoco convertirá la matriz de 'int' a' string'. –

4

Sé que tiene una buena respuesta, pero no necesita LINQ o Seleccionar. Puedes hacerlo con un ConvertAll y un método anónimo. De esta manera:

var list = new List<int>(); 
.... 
var array = list.ConvertAll(x => x.ToString()).ToArray(); 

idea similar, pero creo que esto no es linq. en caso de que eso importe

+1

Por lo que vale, 'ToArray' es un método estático en la clase' Enumerable', lo que lo hace LINQ en mi opinión. Además, hay una buena posibilidad de que esto sea menos eficiente que usar 'Select':' ConvertAll' creará una lista intermedia antes de convertir esa lista a una matriz; 'Seleccionar' no necesita crear esa lista intermedia. – LukeH

0

Como su lista solo tiene un número, puede convertirlos fácilmente en una cadena. Simplemente crea un bucle y convierte sus miembros a la cadena.

string[] the_array = new string[the_list.Count]; 
int i=0; 
foreach(var item in the_list) 
{ 
    the_array[i] = item.ToString(); 
    i++; 
} 
+0

Agregue un poco de explicación a su respuesta. Simplemente publicar el código puede ser confuso. –

Cuestiones relacionadas