2017-10-14 86 views
0

說我有以下代碼。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})!}) 

,但我得到一個錯誤,因爲有時numbers.first(where: {$0 == id})回報nil有時並不能解開。

我知道這不是最好的例子,但它是解釋我想要做的最簡單的例子。

我在這個例子中的目標是讓finalArray[4,8,13,15]。所以IF numbers.first(where: {$0 == id})nil只是跳過這個值。

這可能與map在Swift中嗎?或者返回的數組長度必須等於我們正在運行的數組map

快速注意。我的例子很簡單,實際上我的問題更復雜。我有我的理由想要使用map,因爲它是一種基於另一個陣列獲取新陣列的簡單方法。

+1

只需使用代替地圖flatMap –

回答

1

由於@LeoDabus指出你應該在這種情況下使用flatMap而不是map。原因是flatMap可以返回nil,因爲flatMap返回類型爲U?,而map返回類型爲U且無法處理nil

所以這條線,可以處理nilflatMap

let finalArray = myArray.flatMap({ id in numbers.first(where: {$0 == id}) })