簡體   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