Самый быстрый способ разделить цифры int в массив в .NET? - PullRequest
17 голосов
/ 23 октября 2009

Я хочу разделить цифры целого числа, скажем 12345, на массив байтов {1,2,3,4,5}, но я хочу наиболее эффективный способ сделать это, потому что моя программа это делает миллионы раз.

Есть предложения? Спасибо.

Ответы [ 11 ]

0 голосов
/ 23 октября 2009

Я не тестировал это или что-то еще, но я думаю, что это был бы самый простой ответ. Поправь меня, если я ошибаюсь.

    Dim num As Integer = 147483647
    Dim nDigits As Integer = 1 + Convert.ToInt32(Math.Floor(Math.Log10(num)))
    Dim result(nDigits - 1) As Integer

    For a As Integer = 1 To nDigits
        result(a - 1) = Int(num / (10 ^ (nDigits - a))) Mod 10
    Next

** РЕДАКТИРОВАТЬ **

Пересмотрена функция, потому что показатели кажутся очень дорогими.

Private Function Calc(ByVal num As Integer) As Integer()
    Dim nDigits As Int64 = 1 + Convert.ToInt64(Math.Floor(Math.Log10(num)))
    Dim result(nDigits - 1) As Integer
    Dim place As Integer = 1

    For a As Integer = 1 To nDigits
        result(nDigits - a) = Int(num / place) Mod 10
        place = place * 10
    Next

    Return result
End Function

Это скорость около 775k / sec (для цифр 9 цифр или меньше). Сбросьте максимальные цифры до 7, и он будет на скорости 885k / s. 5 цифр при 1,1 м / с.

...