Swift:根据键将字典数组转换为字符串数组

时间:2018-12-13 07:10:44

标签: swift swift4.2

以下是我的词典数组,我想仅基于特定键(在我的情况下为contentURL键)获得仅包含字符串的数组。

如何实现?我遇到过ReduceFilter,但没有人符合我的要求。

(
  {
    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 :(得分:12)

只需使用compactMap

 let array = arrayOfDicts.compactMap {$0["contentURL"] }

答案 1 :(得分:3)

var myDict: [[String : String]] = [["contentURL" : "https://d1shcqlf263trc.cloudfront.net/1510232473240ab.mp4"],["contentURL" : "https://d1shcqlf263trc.cloudfront.net/1510232473240ab.mp4"],["contentURL" : "https://d1shcqlf263trc.cloudfront.net/1510232473240ab.mp4"]]
let arr = myDict.map { $0["contentURL"] }

答案 2 :(得分:2)

var stringArray:[String] = []
for (key, value) in yourArrayOfDictionary {
    stringArray.append(value)
} 

答案 3 :(得分:2)

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”]

答案 4 :(得分:2)

如果要使用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,因为您需要记住,对字典进行下标会返回OptionalString不同的类型

答案 5 :(得分:2)

在这种情况下,您也只能使用.map

let array = arrayOfDicts.map {$0["contentURL"]! }