¿Existe una manera fácil de convertir un int en una matriz de ints de cada dígito?

Resuelto Andrew Bullock asked hace 15 años • 11 respuestas

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)?

Andrew Bullock avatar May 06 '09 18:05 Andrew Bullock
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();
}
Garry Shutler avatar May 06 '2009 11:05 Garry Shutler

Sé que probablemente haya mejores respuestas que esta, pero aquí hay otra versión:

Puedes usar yield returnpara 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

Svish avatar May 06 '2009 13:05 Svish