[英]Swift - How can I add an expand a nested dictionary?
我想将en条目添加到这种Array / Tuple / Dictionary data
:
var i=0
var data = [("foo", ["first": 1, "second": 2]), ("bar", ["first": 1, "second": 2])]
var newData = [(Int, [String: AnyObject])]()
for (key, value) in data {
newData.append((i, value))
i = i+1
}
for循环正在将元组的“键”(即AnyObject)更改为Int。 我希望元组也将关键字作为字典。
[("foo", ["first": 1, "second": 2]),
("bar", ["first": 1, "second": 2])]
变成
[(1, ["first": 1, "second": 2]),
(2, ["first": 1, "second": 2])]
我想要的是:
[(1, ["first": 1, "second": 2, "key": "foo"]),
(2, ["first": 1, "second": 2, "key": "bar"])]
从...开始
let data: [(String, [String: AnyObject])] = [
("foo", ["first": 1, "second": 2]),
("bar", ["first": 1, "second": 2])]
这是一种变体,不需要单独的计数变量
let newData = data.map({ (var e) -> [String: AnyObject] in
e.1.updateValue(e.0, forKey: "key")
return e.1
}).enumerate().map({ ($0.0 + 1, $0.1) })
enumerate
调用也可以移到最前面,这使得块签名的紧凑性降低了一点。
let newData = data.enumerate().map { (var e) -> ((Int, [String: AnyObject])) in
e.1.1.updateValue(e.1.0 , forKey: "key")
return (e.0 + 1, e.1.1)
}
两种变体都导致
[(1, ["first": 1, "second": 2, "key": "foo"]),
(2, ["first": 1, "second": 2, "key": "bar"])]
尝试这个
var data = [("foo", ["first": 1, "second": 2]), ("bar", ["first": 1, "second": 2])]
var i = 0
var newData = [(Int, [String: AnyObject])]()
for (key, value) in data {
var newValue : [String:AnyObject] = value
newValue["key"] = key
newData.append((++i, newValue))
}
print(newData)
或使用Swift map
功能
var i = 0
let newData = data.map { (key, value) -> (Int, [String: AnyObject]) in
var newValue = value
newValue["key"] = key
return (++i, newValue)
}
print(newData)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.