Tengo una serie de enteros en forma de cadena:
var arr = new string[] { "1", "2", "3", "4" };
Necesito una variedad de enteros 'reales' para impulsarlo aún más:
void Foo(int[] arr) { .. }
Traté de lanzar 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 alguna otra forma de completar la tarea?
c#
.net
linq
extension-methods
abatishchev
fuente
fuente
Respuestas:
Dada una matriz, puede usar el
Array.ConvertAll
método :Gracias a Marc Gravell por señalar que la lambda se puede omitir, produciendo una versión más corta que se muestra a continuación:
Una solución LINQ es similar, excepto que necesitaría una
ToArray
llamada adicional para obtener una matriz:fuente
ConvertAll(arr, int.Parse)
es suficienteArray.ConvertAll(arr, AddressOf Integer.Parse)
EDITAR: para convertir a matriz
Esto debería funcionar:
fuente
Para evitar excepciones con
.Parse
, aquí hay algunas.TryParse
alternativas.Para usar solo los elementos que se pueden analizar:
o
Alternativas que utilizan
0
para los elementos que no se pueden analizar:o
C # 7.0 :
fuente
var a = Enumerable.Range(0, arr.Length).Where(i => int.TryParse(arr[i], out i)).ToArray();
solo devuelve las indeces 0,1,2, ... en lugar de los valores reales. ¿Cuál es la solución correcta aquí?new int[0]
? Cuando tengo el texto, no obtener una0
en mi serie ...new int[0]
es una matriz int vacía. Los primeros dos ejemplos omiten valores que no se pueden analizar, y los dos últimos ejemplos se usan0
para valores que no se pueden analizar.new int[] {0}
. Gracias.simplemente puede emitir una matriz de cadenas a la matriz int mediante:
fuente
Dim converted = arr.Select(addressof Integer.Parse)
Debes asegurarte de que no recibes
IEnumerable<int>
una devoluciónfuente
fuente