Swift: преобразование массива словарей в массив строк на основе ключа - PullRequest
0 голосов
/ 13 декабря 2018

Ниже приводится мой массив словарей, и я хочу получить массив только строк на основе определенного ключа (ключ contentURL в моем случае).

Как мне его достичь?Я сталкивался с Reduce & Filter, но никто не вписывается в мои требования.

(
  {
    contentURL = "https://d1shcqlf263trc.cloudfront.net/1510232473240ab.mp4";
  },
  {
    contentURL = "https://d1shcqlf263trc.cloudfront.net/151021804847312.mp4";
  },
  {
    contentURL = "https://d1shcqlf263trc.cloudfront.net/151021536556612.mp4";
  },
  {
    contentURL = "https://d1shcqlf263trc.cloudfront.net/151021528690312.mp4";
  }
)

Ожидаемый результат

[
  "https://d1shcqlf263trc.cloudfront.net/1510232473240ab.mp4", 
  "https://d1shcqlf263trc.cloudfront.net/151021804847312.mp4",
  "https://d1shcqlf263trc.cloudfront.net/151021536556612.mp4", 
  "https://d1shcqlf263trc.cloudfront.net/151021528690312.mp4"
]

Ответы [ 6 ]

0 голосов
/ 13 декабря 2018

Также в этом случае вы можете использовать .map.

let array = arrayOfDicts.map {$0["contentURL"]! }
0 голосов
/ 13 декабря 2018

Если вы хотите использовать Reduce:

let arr = [
    ["contentURL" : "https://d1shcqlf263trc.cloudfront.net/"],
    ["contentURL" : "https://d1shcqlf263trc.cloudfront.net/.mp4"],
    ["contentURL" : "https://d1shcqlf263trc.cloudfront.net/1510232473240ab.mp4"]
]


let only = arr.reduce([String]()) { (partialRes, dictionary) -> [String] in
    return partialRes + [dictionary["contentURL"]!]
}

Более компактная версия:

let compact = arr.reduce([String]()) { $0 + [$1["contentURL"]!] }

Возможно, вы не смогли использовать Reduce, так как вам нужно помнить, что вы подписываете словарьвозвращает Optional, который отличается от String

0 голосов
/ 13 декабря 2018
var arrayDict = [["contentURL":"fd"],["contentURL":"fda"],["contentURL":"fdb"],["contentURL":"fdc"]]

let arraywithOptionstring = arrayDict.map{$0["contentURL"]}
        if let arr = arraywithOptionstring as? [String]{
             print(arr)
        }

Ожидаемый результат: ["fd", "fda", "fdb", "fdc"]

0 голосов
/ 13 декабря 2018

Просто используйте compactMap

 let array = arrayOfDicts.compactMap {$0["contentURL"] }
0 голосов
/ 13 декабря 2018
0 голосов
/ 13 декабря 2018
var stringArray:[String] = []
for (key, value) in yourArrayOfDictionary {
    stringArray.append(value)
} 
...