以下是我的词典数组,我想仅基于特定键(在我的情况下为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"
]
答案 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,因为您需要记住,对字典进行下标会返回Optional
与String
不同的类型
答案 5 :(得分:2)
在这种情况下,您也只能使用.map
。
let array = arrayOfDicts.map {$0["contentURL"]! }