for (var i = 1; i < 1024; i *= 2) {
print(i)
}
Как это можно сделать для цикла?Swift C-style loop
Данное решение предназначено для: +=
Оператор не *=
Оператор. Пожалуйста, предоставьте решение для *=
.
for (var i = 1; i < 1024; i *= 2) {
print(i)
}
Как это можно сделать для цикла?Swift C-style loop
Данное решение предназначено для: +=
Оператор не *=
Оператор. Пожалуйста, предоставьте решение для *=
.
В Swift 3 вы можете сделать
for f in sequence(first: 1, next: { $0 < (1024/2) ? $0 * 2 : nil }) {
print(f)
}
Понятие функции sequence
описывается в documentation.
Печать бесконечного списка легко, код будет просто
for f in sequence(first: 1, next: {$0 * 2}) {
print(f)
}
Поскольку мы хотим, чтобы остановить программу в каком-то момент мы с нами троичным оператором?
, чтобы завершить список, как только мы достигнем максимальное значение. Поскольку последнее значение, которое мы хотим напечатать, это 512
, последнее значение, которое мы должны удвоить, - 256
. Для 512
, который не удовлетворяет условию < (1024/2)
, мы имеем nil
и тем самым останавливаем.
О да, это намного яснее, чем стиль в стиле C. Один шаг вперед, два шага назад. Имейте upvote. – Bathsheba
Обратите внимание, что цикл C (из вопроса) * исключает * значение 1024. Ваш код будет включать это число. –
@MadPhysicist: ваш шаг будет производить 1, 3, 5, 7, ... и не 1, 2, 4, 8, 16, .... по желанию. –
Почему вы хотите сделать это по-другому? То, как у вас есть, довольно оптимально. – Bathsheba
@ Bathsheba этот путь невозможен в Swift 3. – Fogmeister
Аналогично: [Преобразование цикла C для цикла, использующего разделение для шага к Swift 3] (http://stackoverflow.com/questions/39903503/converting-ac- style-for-loop-that-uses-division-for-the-step-to-swift-3) и [Express для циклов в быстром динамическом диапазоне] (http://stackoverflow.com/questions/40070202/express- for-loop-in-swift-with-dynamic-range) –