arrays - 如何仅映射非空值?

标签 arrays swift

我正在构建一个 iOS 应用程序,我得到了一个包含文本字段的数组,我想将这些字段的文本映射到一个数组中。

这是我尝试的方法,它有效,但我只想映射一个不为空的值。现在,即使文本字段为空,我也能得到所有内容。

textFields.map{$0.text!}

更新

我是这样解决的

textFields.filter({$0.text! != ""}).map({$0.text!})

最佳答案

当前的答案都涉及两次遍历数组:一次用于过滤,一次用于映射。

更有效的方法是:

textFields.flatMap{ $0.text?.isEmpty == false ? $0.text! : nil }

闭包{ $0.text?.isEmpty == false ? $0.文字! : nil } 如果每个元素的 text 属性非 nil(因为它是可选属性)且不为空(空意味着 == "",则返回该元素的 text 属性)。否则,它将返回nil

因为 flatMap 方法已经从最终结果中排除了任何 nil 值,所以这保证了返回的只是原始元素中的非 nil、非空 text 字符串数组,并且只需通过一次数组即可完成此操作。

关于arrays - 如何仅映射非空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774049/

相关文章:

arrays - 返回一个范围内的整数数组

swift - 新手 - 无法访问 TableView 函数且无法加载 tableView

swift - 传输多个字典ApplicationContext(从iPhone到Apple Watch)

ios - Swift 中的 UIAppearance 和圆角边框

ios - 将实体属性数据保存到核心数据后如何保留实体属性数据

arrays - 在 Swift 数组上使用 didSet 和 private(set)

arrays - 用通用步幅拆分数组?

c - 将结构传递给函数 c

javascript - 通过子数组的聚合和排序来展平多维数组

ios - Xcode:模块文件是由较新版本的编译器创建的