为什么Swift中的过滤器会迭代集合两次?

  发布于 2023-01-11 19:04

Swift操场或控制台应用程序中的以下代码:

let letters = ["A", "B", "C"]

letters.filter({
    (x : String) -> Bool in
    println("PRINT: \(x)")
    return true
})

打印出来:

PRINT: A
PRINT: B
PRINT: C
PRINT: A
PRINT: B
PRINT: C

为什么它会两次迭代集合?

2 个回答
  • 最有可能filter实现的是首先计算它需要存储的元素数量,然后在使用该数字来调整新数组的存储分配大小后,再次循环以复制他需要保留的元素.

    如果总是返回它只循环一次的事实false意味着如果结果为空则它会优化第二个循环.

    您可能希望将此视为一个错误,但它可能"按设计工作":毕竟数组不是列表.

    2023-01-11 19:07 回答
  • 它在beta 5中进行了修改.它现在只运行一次,ABC而不是打印ABCABC

    2023-01-11 19:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有