Swift Forin在何处执行筛选或跳过(继续)?
我刚刚了解了Swift的forin where,但似乎非常缺乏文档。所以在我的脑海里有一个问题:它是先执行过滤,然后循环,还是只执行带条件的循环?给定以下代码Swift Forin在何处执行筛选或跳过(继续)?,swift,performance,loops,for-loop,conditional,Swift,Performance,Loops,For Loop,Conditional,我刚刚了解了Swift的forin where,但似乎非常缺乏文档。所以在我的脑海里有一个问题:它是先执行过滤,然后循环,还是只执行带条件的循环?给定以下代码 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 { conti
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)
}
我应该在where中使用forin,还是只使用filter-then-foreach?它是后者(迭代所有元素,仅为
满足条件的元素)
for语句采用任意序列,而不仅仅是数组。
首先过滤序列不仅效率低下(内存和
时间方面),但对于产生“无限多”值的序列也是不可能的,如本例所示:
for x in 1... where x % 3 == 0 {
print(x)
if x > 10 { break }
}
这里的1…
是一个“部分范围”,表示所有大于的整数
或者等于一个。就像
for i in arr.lazy.filter{$0>3}
@user28434如果你的循环内容很短,你甚至可以这样写。forEach{print($0)}
不,我的意思是在为…in…应用filter时,
就像for…in…lazy.filter
:get element->check condition,通过它。如果没有惰性,它将首先过滤整个序列,然后在其上循环。当迭代大数据时,我通常先过滤,然后循环结果。哪种方式在性能上更有效?@Eddie:这要看情况而定。如果只迭代一次,那么for in where应该更快,因为它不会创建中间数组。如果您需要在同一个过滤集上迭代多次,则先过滤会更快您必须测量和分析您的用例。