Convierta string[] a int[] en una línea de código usando LINQ
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?
Aceptado
Dada una matriz, puedes usar el Array.ConvertAll
mé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 ToArray
llamada adicional para obtener una matriz:
int[] myInts = arr.Select(int.Parse).ToArray();
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));