Получите отдельные цифры от int в С#

Вопрос: Я наткнулся на эту проблему, когда мне нужно было вычислить номер/цифру чека из отдельных цифр самого номера. Например, у меня есть номер (Int32) 423594340 и я хочу набор целых чисел, таких как 4,2,3,5,9,4,3,0. Я думаю, что лучше не преобразовывать заданный int в String из-за производительности. Но как вы это делаете? Лучший ответ: Я придумал

Вопрос:

Я наткнулся на эту проблему, когда мне нужно было вычислить номер/цифру чека из отдельных цифр самого номера.

Например, у меня есть номер (Int32) 423594340 и я хочу набор целых чисел, таких как 4,2,3,5,9,4,3,0.

Я думаю, что лучше не преобразовывать заданный int в String из-за производительности. Но как вы это делаете?

Лучший ответ:

Я придумал индивидуальное озадаченное решение.

Содержание

  1. # 1: Собственное созданное решение
  2. # 2: Modulo с Linq.Reverse()
  3. # 3: Modulo со стеком LIFO
  4. тестирование

# 1: Собственное созданное решение

public static IEnumerable<int> GetDigits(int source) { int individualFactor = 0; int tennerFactor = Convert.ToInt32(Math.Pow(10, source.ToString().Length)); do { source -= tennerFactor * individualFactor; tennerFactor /= 10; individualFactor = source / tennerFactor; yield return individualFactor; } while (tennerFactor > 1); }

# 2: Modulo с Linq.Reverse()

После этого я исследовал Интернет для других решений, и я наткнулся на одного из людей Java: как получить отдельные цифры номера int?

Недостатком является то, что порядок целых чисел в коллекции меняется на противоположный. Здесь идет Microsoft Linq.

Как вызвать метод с .Reverse().

… GetDigits2(input).Reverse() …

И фактический метод.

public static IEnumerable<int> GetDigits2(int source) { while (source > 0) { var digit = source % 10; source /= 10; yield return digit; } }

# 3: Modulo со стеком LIFO

Что еще я мог сделать, когда не хочу думать о вызове .Revers() после метода (GetDigits2(int source))? Поэтому я использую переменную внутри метода, вызываю.Reverse() для переменной и возвращаю ее результат.

Или что-то совершенно другое: я помню логику LIFO. В.NET вы используете для этого класс Stack.

public static IEnumerable<int> GetDigits3(int source) { Stack<int> digits = new Stack<int>(); while (source > 0) { var digit = source % 10; source /= 10; digits.Push(digit); } return digits; }

тестирование

Я тестировал каждый метод 10 миллионов раз и измерял количество тиков между началом и концом теста.

# 1: собственный метод создания

1’549’084 ticks

# 2: Modulo с Linq.Reverse()

2’252’875 ticks

# 3: Modulo со стеком LIFO

23’626’839 ticks

ТЛ; др

Здесь идет скрипка: Получить цифры из int

Оцените статью
Добавить комментарий