¿Existe una manera fácil de convertir un int en una matriz de ints de cada dígito?
decir que tengo
var i = 987654321;
¿Existe una manera fácil de obtener una matriz de dígitos, el equivalente a
var is = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1 };
sin .ToString()
ejecutar e iterar sobre los caracteres con int.Parse(x)
?
Aceptado
public Stack<int> NumbersIn(int value)
{
if (value == 0) return new Stack<int>();
var numbers = NumbersIn(value / 10);
numbers.Push(value % 10);
return numbers;
}
var numbers = NumbersIn(987654321).ToArray();
Alternativa sin recursividad:
public int[] NumbersIn(int value)
{
var numbers = new Stack<int>();
for(; value > 0; value /= 10)
numbers.Push(value % 10);
return numbers.ToArray();
}
Sé que probablemente haya mejores respuestas que esta, pero aquí hay otra versión:
Puedes usar yield return
para devolver los dígitos en orden ascendente (según el peso, o como se llame).
public static IEnumerable<int> Digits(this int number)
{
do
{
yield return number % 10;
number /= 10;
} while (number > 0);
}
12345 => 5, 4, 3, 2, 1