Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Forin在何处执行筛选或跳过(继续)?_Swift_Performance_Loops_For Loop_Conditional - Fatal编程技术网

Swift Forin在何处执行筛选或跳过(继续)?

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

我刚刚了解了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 { 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应该更快,因为它不会创建中间数组。如果您需要在同一个过滤集上迭代多次,则先过滤会更快您必须测量和分析您的用例。