2015-10-04 6 views
-2

Я учился программировать быстро, используя ресурс, и там я увидел эту функцию, которая меняет характер, указанный в параметре. Вот код:Как работает эта функция?

func reverseIt(s: String) -> String { 
    var rst = "" 
    for char in s.characters { 
     rst = "\(char)" + rst 
    } 
    return rst 
} 

Я просто хочу знать, как же это удалось повернуть его вспять, потому что я не С.Е. ничего конкретного здесь, который делает что

+2

Вы начинаете с пустой строки, добавляя каждый символ в строку перед пустой строкой. Вы написали это, что вы не понимаете? – JAL

+0

Распечатайте первую часть цикла for, затем вы увидите. – usr1234567

+0

Я не писал это, я только что увидел его где-то и набрал его здесь. –

ответ

2

Шаг через него в уме, используя «Hello» в качестве примера:

В первый раз, rst пуст, и становится "H" + rst или "H"rst пуст).

В следующий раз, то второй символ "e" берется, и rst становится "e" + rst, который "e" + "H" или "eH". Вы можете видеть, где это происходит.

+0

Oooohhh ... Я получил его сейчас !!! Большое вам спасибо. В значительной степени здравый смысл, но все равно спасибо вам, много! –

+0

Добро пожаловать. Да, здравый смысл - это тот ответ, который вы ищете ;-) Должен помочь вам ответить на множество вопросов для себя! Кстати, теперь, когда вы его получите, другие ответы тоже будут иметь для вас смысл. – Kenney

+0

Да, они конечно делают !! Еще раз спасибо! –

0

Функция очень легко следовать , просто посмотрите эту строку rst = "\(char)" + rst.

Первоначально это пустая строка, и каждый символ (полученный для переменной в for, а затем с использованием строковой интерполяции) добавляется в начале строки на каждой итерации оператора for.

Я надеюсь, что это поможет вам.

+0

Но почему бы и нет в правильном порядке. Например, почему он не печатает «привет» в правильном порядке, а скорее, начиная с конца? –

+0

@ YousufEjazi007 Существует несколько способов обратной строки, если вы думаете, используя структуру данных стека, итерацию с конца строки, итерацию с самого начала и т. Д. Конечно, каждый способ имеет стоимость (говорящий в памяти и КПД). Способ, используемый в вашем вопросе, - это только один из них, не более того. –

+0

Да, я проверил это в Интернете, была даже целая страница энциклопедии о том, как отменить данную строку. Но все же я не совсем понимаю. Можете ли вы попробовать еще раз, чтобы сделать его немного проще для меня?Я буду благодарен .. –

0

Причина, по которой она меняет строку, связана с порядком кода справа от оператора присваивания (=). Если бы код был таким:

rst = rst + "\(char)" 

то результаты не будут отменены. Если это не поможет вам разобраться в этом, то давайте сделаем это шаг за шагом. Использование кода:

rst = "\(char)" + rst 

для каждого прохода для-в цикле, то значения будут выглядеть примерно так:

first pass - rst would get char ("h") + rst ("")  -> "h" 
second pass - rst would get char ("e") + rst ("h") -> "eh" 
third pass - rst would get char ("l") + rst ("eh") -> "leh" 
fourth pass - rst would get char ("l") + rst ("leh") -> "lleh" 
fifth pass - rst would get char ("o") + rst ("lehh") -> "olleh" 

ли это сделать ясно в вашем уме сейчас?

Смежные вопросы