Я не знаю Swift, но я могу объяснить код C # ... Он очень запутанный и может быть значительно уменьшен ...
Давайте начнем с первой строки:
string text = number.ToString();
Это преобразует число в строку, поэтому допустим, что число равно 123450
, оно преобразует его в "123450"
.Это не нужно в нашем примере, потому что number
уже передан как string
, поэтому .ToString()
можно полностью исключить, не затрагивая ничего.
Теперь цикл for
:
for (int i = 0; i < text.Length; i++) {
int num = Convert.ToInt32((int)(text[text.Length - i - 1] - '0'));
}
Он будет повторять каждый символ в строке, цикл можно упростить, если использовать параметры цикла for лучше:
for (int i = text.Length - 1; i >= 0; i--) {
int num = Convert.ToInt32((int)(text[i] - '0'));
}
Было бы проще читать, номы продолжим работу с исходным кодом ...
Игнорируя, что это действительно недопустимо в приведенном выше контексте, давайте предположим, что вы делаете что-то с num
внутри цикла, чтобы сделать его стоящим.
Давайте разберемся с этим:
text[text.Length - i - 1] - '0'
Делает "ASCII математику", чтобы придумать число.Числа ASCII начинаются с десятичного числа 48, поэтому '0'
эквивалентно значению 48
.Итак, для первой итерации:
text[text.Length (6) - i (0) - 1 = 5] = '0' - '0' = 0
Convert.ToInt32
здесь избыточно, потому что результат '0' - '0'
является целочисленным значением 0
.Приведение (int)
впереди также является избыточным, поэтому вся эта строка может быть уменьшена до:
int num = text[text.Length - i - 1] - '0';
Так что это имеет гораздо больше смысла.Вы могли бы написать это по-другому:
int num = Convert.ToInt32(text[text.Length - i - 1]) - 48;
Таким образом, это в основном превращает символ '0'
обратно в число 0
и так далее со всеми числами от 0 до 9. Этот код сломается, хотя(дать неточные результаты), если number
является значением с плавающей запятой.
Я знаю, что здесь упражнение заключается в преобразовании этого в другой язык, но в C # весь цикл for может быть уменьшен до этого:
public static int calculate(string number)
{
var reverseNums = number.ToCharArray().Reverse().Select(c => c - '0').ToList();
//Do whatever on the reverseNums
}