Цикл for в swift 3.0?

swift3

#1

Работает ли цикл for в Swift 3.0 и позже?


#2

Работает :slight_smile:


#3

я извиняюсь за может быть наивный вопрос, но что-то гуглю, а он выводит по этому циклу или другие языки, или старые версии swift.

И чтобы уже два раза не вставать, не подскажешь, какой у него теперь синтаксис. Там ведь сейчас инкремента нет, а обычный += почему-то выдает ошибку


#4
for i in 0...n {
    print(i)
}

#5

так это цикл for in, а мне нужен цикл for, чтобы в нем можно было менять величину шага


#6
for _ in stride(from: 0, through: 10, by: 2) {

}

#7

это я так понимаю generic function, а как сюда вписать цикл, чтобы он складывал соседние значения массива?

Например, есть массив array = [1, 2, 3, 4, 5, 6]. Надо сложить 1+2, 3+4, 5+6


#8
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)
}

#9
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, +) }

#10

Знаешь основы - можешь красиво написать! Спасибо за наглядный пример!
Ребята!Рекомендую такие примеры рассматривать и вникать как это работает!


#11

Можно даже улучшить :slight_smile:

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, +) }

#12

а поясните логику?

я так понимаю, что какого-то простого решения здесь нет


#13

бинго! вот придумал такой вариант

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


#14

блин, этот пример работает только с числами в последовательности. Для разбросанных чисел надо изменить

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])
    }    
}

// print

1070547
293309
756140
827421
846294
1454594
1397825
909537
1330815
430353
623704
652054
980585
966344


#15

stride создает диапазон, map трансформирует диапазон в массив, результатом каждой итерации map является сумма диапазона значений массива array, всё это есть в учебнике.

Лучше так:

for i in 0..<array.count where i % 2 == 0 {
    print(array[i] + array[i + 1])
}

#16

Век живи - век учись, видел where в учебнике в switch, но не знал, что его можно использовать и отдельно.

сэнкс!


#17

В общем, вопрос решен, спасибо всем за помощь

P.S. Ради интереса, если вернуться к исходному вопросу, то получается, что цикла именно for в swift 3 уже нет? Есть или for in или stride, правильно я понимаю?


#18

Есть, но он видоизменился.


#19
 for i in 1..<10 {
      print(i)
 }

#20

так это и есть for in