繁体   English   中英

Swift-如何添加展开嵌套词典?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM