我正在构建一个 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/