Swift操场或控制台应用程序中的以下代码:
let letters = ["A", "B", "C"]
letters.filter({
(x : String) -> Bool in
println("PRINT: \(x)")
return true
})
Run Code Online (Sandbox Code Playgroud)
打印出来:
PRINT: A
PRINT: B
PRINT: C
PRINT: A
PRINT: B
PRINT: C
Run Code Online (Sandbox Code Playgroud)
为什么它会两次迭代集合?
Ana*_*ile 12
最有可能filter
实现的是首先计算它需要存储的元素数量,然后在使用该数字来调整新数组的存储分配大小后,再次循环以复制他需要保留的元素.
如果总是返回它只循环一次的事实false
意味着如果结果为空则它会优化第二个循环.
您可能希望将此视为一个错误,但它可能"按设计工作":毕竟数组不是列表.
归档时间: |
|
查看次数: |
1703 次 |
最近记录: |