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}) })

用平面图代替地图用平面图代替地图