Работает ли цикл for в Swift 3.0 и позже?
Цикл for в swift 3.0?
я извиняюсь за может быть наивный вопрос, но что-то гуглю, а он выводит по этому циклу или другие языки, или старые версии swift.
И чтобы уже два раза не вставать, не подскажешь, какой у него теперь синтаксис. Там ведь сейчас инкремента нет, а обычный += почему-то выдает ошибку
это я так понимаю generic function, а как сюда вписать цикл, чтобы он складывал соседние значения массива?
Например, есть массив array = [1, 2, 3, 4, 5, 6]. Надо сложить 1+2, 3+4, 5+6
let array = [1, 2, 3, 4, 5]
var result: [Int] = []
for i in stride(from: 1, to: array.count, by: 2) {
result.append(array[i] + array[i - 1])
}
if array.count % 2 == 1, let lastNumber = array.last {
result.append(lastNumber)
}
let array = [1, 2, 3, 4, 5]
let result = stride(from: 0, to: array.count, by: 2).map { array[$0..<min($0 + 2, array.count)] }.map { $0.reduce(0, +) }
Знаешь основы - можешь красиво написать! Спасибо за наглядный пример!
Ребята!Рекомендую такие примеры рассматривать и вникать как это работает!
Можно даже улучшить
let array = [1, 2, 3, 4, 5]
let result = stride(from: 0, to: array.count, by: 2).map { array[$0..<min($0 + 2, array.count)].reduce(0, +) }
бинго! вот придумал такой вариант
var array = [1, 2, 3, 4, 5, 6]
for i in 0…<array.count {
if array[i] % 2 != 0 { print(array[i] + (array[i] + 1)) }
}
// print - 3, 7, 11
блин, этот пример работает только с числами в последовательности. Для разбросанных чисел надо изменить
var array = [162079, 908468, 79617, 213692, 591614, 164526, 710463, 116958, 465099, 381195, 548523, 906071, 679514, 718311, 262596, 646941, 930098, 400717, 44064, 386289, 183570, 440134, 180879, 471175, 651399, 329186, 28559, 937785]
for i in 0..<array.count {
if i % 2 == 0 {
print(array[i] + array[i+1])
}
}
1070547
293309
756140
827421
846294
1454594
1397825
909537
1330815
430353
623704
652054
980585
966344
stride создает диапазон, map трансформирует диапазон в массив, результатом каждой итерации map является сумма диапазона значений массива array, всё это есть в учебнике.
Лучше так:
for i in 0..<array.count where i % 2 == 0 {
print(array[i] + array[i + 1])
}
Век живи - век учись, видел where в учебнике в switch, но не знал, что его можно использовать и отдельно.
сэнкс!
В общем, вопрос решен, спасибо всем за помощь
P.S. Ради интереса, если вернуться к исходному вопросу, то получается, что цикла именно for в swift 3 уже нет? Есть или for in или stride, правильно я понимаю?