Arrays Swift数组映射跳过值
假设我有以下代码Arrays Swift数组映射跳过值,arrays,swift,Arrays,Swift,假设我有以下代码 let myArray = [1,4,5,8,9,13,14,15] let numbers = [4,8,13,15] let finalArray = myArray.map({id in numbers.first(where: {$0 == id})!}) 但是我得到了一个错误,因为有时数字。首先(其中:{$0==id})有时返回nil,并且无法展开 我知道这不是最好的例子,但它是解释我要做什么的最简单的例子 在这个例子中,我的目标是让finalArraybe[4,8
let myArray = [1,4,5,8,9,13,14,15]
let numbers = [4,8,13,15]
let finalArray = myArray.map({id in numbers.first(where: {$0 == id})!})
但是我得到了一个错误,因为有时数字。首先(其中:{$0==id})
有时返回nil
,并且无法展开
我知道这不是最好的例子,但它是解释我要做什么的最简单的例子
在这个例子中,我的目标是让finalArray
be[4,8,13,15]
。所以如果numbers.first(其中:{$0==id})
是nil
只需跳过该值
使用Swift中的map
是否可以实现这一点?还是返回的数组长度必须等于我们正在运行的map
数组
速记。我的例子很简单,实际上我的问题更复杂。我有理由想使用
map
,因为这是一种基于另一个数组获取新数组的简单方法。正如@LeoDabus指出的,在这种情况下,您应该使用flatMap
而不是map
。原因是flatMap
可以返回nil
,因为flatMap的返回类型为U?
,而map
的返回类型为U
,无法处理nil
因此,该行可以使用flatMap
处理nil
:
let finalArray = myArray.flatMap({ id in numbers.first(where: {$0 == id}) })
正如@LeoDabus指出的,在这种情况下,您应该使用
flatMap
而不是map
。原因是flatMap
可以返回nil
,因为flatMap的返回类型为U?
,而map
的返回类型为U
,无法处理nil
因此,该行可以使用flatMap
处理nil
:
let finalArray = myArray.flatMap({ id in numbers.first(where: {$0 == id}) })
为了扩展Rashwan L的回答,我认为Swift 4版本如下:
let finalArray = myArray.compactMap({ id in numbers.first(where: {$0 == id}) })
为了扩展Rashwan L的回答,我认为Swift 4版本如下:
let finalArray = myArray.compactMap({ id in numbers.first(where: {$0 == id}) })
用平面图代替地图用平面图代替地图