2017-09-27 112 views
1

如果我有以下數組,並且想通過將mysteryDoors數組映射爲字典的鍵來創建包含門獎勵的字符串數組,並將相應的值一個新的陣列。如何將整數數組映射爲字典值的鍵

因此,我會得到一個[「禮品卡」,「汽車」,「度假」]的字符串數組我如何做到這一點?

let mysteryDoors = [3,1,2] 

let doorPrizes = [ 
    1:"Car", 2: "Vacation", 3: "Gift card"] 

回答

2

您可以map()在 字典中的每個數組元素爲相應的值。如果是保證所有的數組元素是 存在於字典鍵,那麼你可以這樣做:

let mysteryDoors = [3, 1, 2] 
let doorPrizes = [ 1:"Car", 2: "Vacation", 3: "Gift card"] 

let prizes = mysteryDoors.map { doorPrizes[$0]! } 
print(prizes) // ["Gift card", "Car", "Vacation"] 

爲了避免運行時崩潰,如果一個鍵不存在,使用

let prizes = mysteryDoors.flatMap { doorPrizes[$0] } 

忽略未知密鑰,或

let prizes = mysteryDoors.map { doorPrizes[$0] ?? "" } 

將未知鍵映射到默認字符串。

1

如果你必須使用map,那麼它看起來像下面這樣:

let array = mysteryDoors.map { doorPrizes[$0] } 
0

重新閱讀Apple Doc示例代碼並將其更改爲我需要的內容。我相信這是(幾乎)。不幸的是,它現在用新行的字符串格式...

let myPrizes = doorPrizes.map { (number) -> String in 
    var output = "" 
    output = mysteryDoors[number]! 
    return output; 
} 
+0

是的。你可以用map {mysteryDoors [$ 0])來減少它! '儘可能多的人回答。 – sCha