Swift Forin-где выполнить фильтр или пропустить (продолжить)? - PullRequest
0 голосов
/ 25 июня 2018

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

var arr = [1, 2, 3, 4, 5]
for i in arr where i > 3 {
    print(i)
}

машина работает следующим образом:

for i in arr.filter { $0 > 3 }

или как это?

for i in arr {
    guard i > 3 else { continue } 
    print(i)
}

Должен ли я использовать forin-where или простофильтр тогда foreach?

1 Ответ

0 голосов
/ 25 июня 2018

Это последнее (итерация по всем элементам, выполнение тела только для элементов, удовлетворяющих условию).

Операторы for принимают произвольную последовательность , не только массивы.Сначала фильтрация последовательности будет не только неэффективной (с точки зрения памяти и времени), но и невозможной для последовательностей, выдающих «бесконечно много» значений, как в этом примере:

for x in 1... where x % 3 == 0 {
    print(x)
    if x > 10 { break }
}

Здесь 1... - это«Частичный диапазон», представляющий все целые числа, большие или равные единице.

...