我有一些从服务器返回的数据,如下所示: let returnedFromServer = ["title" : ["abc", "def", "ghi"], "time" : ["1234", "5678", "0123"], "content":["qwerty", "asdfg", "zxcvb"]] 我想把它变成这样的东西: let afterTran
let returnedFromServer = ["title" : ["abc", "def", "ghi"], "time" : ["1234", "5678", "0123"], "content":["qwerty", "asdfg", "zxcvb"]]
我想把它变成这样的东西:
let afterTransformation = [["title" : "abc", "time" : "1234", "content": "qwerty"], ["title" : "def", "time" : "5678", "content": "asdfg"], ["title" : "ghi", "time" : "0123", "content": "zxcvb"]]
我目前的实施如下:
var outputArray = [[String : AnyObject]]() for i in 0..<(returnedFromServer["time"] as [String]).count { var singleDict = [String: AnyObject]() for attribute in returnedFromServer { singleDict[attribute] = returnedFromServer[attribute]?[i] } outputArray.append(singleDict) }
这工作正常,但我认为这不是一个非常优雅的解决方案.鉴于Swift有一些简洁的功能,如reduce,filter和map,我想知道如果没有明确地使用循环我是否可以做同样的工作.
谢谢你的帮助!
使用想法和字典扩展extension Dictionary { init(_ pairs: [Element]) { self.init() for (k, v) in pairs { self[k] = v } } func map<OutKey: Hashable, OutValue>(transform: Element -> (OutKey, OutValue)) -> [OutKey: OutValue] { return Dictionary<OutKey, OutValue>(Swift.map(self, transform)) } }
从
> What’s the cleanest way of applying map() to a dictionary in Swift?,
你可以实现这个目标
let count = returnedFromServer["time"]!.count let outputArray = (0 ..< count).map { idx -> [String: AnyObject] in return returnedFromServer.map { (key, value) in return (key, value[idx]) } }