Convierta string[] a int[] en una línea de código usando LINQ

Resuelto abatishchev asked hace 15 años • 6 respuestas

Tengo una serie de números enteros en forma de cadena:

var arr = new string[] { "1", "2", "3", "4" };

Necesito una serie de números enteros "reales" para llevarlo más lejos:

void Foo(int[] arr) { .. }

Intenté transmitir int y, por supuesto, falló:

Foo(arr.Cast<int>.ToArray());

Puedo hacer lo siguiente:

var list = new List<int>(arr.Length);
arr.ForEach(i => list.Add(Int32.Parse(i))); // maybe Convert.ToInt32() is better?
Foo(list.ToArray());

o

var list = new List<int>(arr.Length);
arr.ForEach(i =>
{
   int j;
   if (Int32.TryParse(i, out j)) // TryParse is faster, yeah
   {
      list.Add(j);
   }
 }
 Foo(list.ToArray());

pero ambos se ven feos.

¿Hay otras formas de completar la tarea?

abatishchev avatar Aug 19 '09 07:08 abatishchev
Aceptado

Dada una matriz, puedes usar el Array.ConvertAllmétodo :

int[] myInts = Array.ConvertAll(arr, s => int.Parse(s));

Gracias a Marc Gravell por señalar que se puede omitir la lambda, lo que produce una versión más corta que se muestra a continuación:

int[] myInts = Array.ConvertAll(arr, int.Parse);

Una solución LINQ es similar, excepto que necesitarías una ToArrayllamada adicional para obtener una matriz:

int[] myInts = arr.Select(int.Parse).ToArray();
Ahmad Mageed avatar Aug 19 '2009 00:08 Ahmad Mageed

EDITAR: para convertir a matriz

int[] asIntegers = arr.Select(s => int.Parse(s)).ToArray();

Esto debería funcionar:

var asIntegers = arr.Select(s => int.Parse(s));
Simon Fox avatar Aug 19 '2009 00:08 Simon Fox