【问题标题】:Getting data from array of dictionaries in an array从数组中的字典数组中获取数据
【发布时间】:2018-02-06 07:53:27
【问题描述】:

我创建了一个ArrayDictionaries

let tempArray = [["id":"1","Name":"ABC"],["id":"2","Name":"qwe"],["id":"3","Name":"rty"],["id":"4","Name":"uio"]]

现在我只需要创建一个 Name 数组。

我所做的是这样的:

var nameArray = [String]()
for dataDict in tempArray {
    nameArray.append(dataDict["Name"]!)
}

但是有没有其他有效的方法来做到这一点。

【问题讨论】:

  • 尝试实现getter setter,这样在数组中添加数据后,您可以根据需要使用循环或襟翼映射获取所需数据。

标签: ios swift nsarray nsdictionary


【解决方案1】:

您可以为此使用flatMap(而不是map),因为flatMap 可以过滤掉nil 值(当dict 没有键“名称”的值时),即names数组将被定义为[String] 而不是[String?]

let tempArray = [["id":"1","Name":"ABC"],["id":"2","Name":"qwe"],["id":"3","Name":"rty"],["id":"4","Name":"uio"]]
let names = tempArray.flatMap({ $0["Name"] })
print(names) // ["ABC", "qwe", "rty", "uio"]

【讨论】:

  • 谢谢。你的逻辑执行得更快。
【解决方案2】:

使用compactMap,因为flatMapdeprecated

let tempArray = [["id":"1","Name":"ABC"],["id":"2","Name":"qwe"],["id":"3","Name":"rty"],["id":"4","Name":"uio"]]
let name = tempArray.compactMap({ $0["Name"]})
print(name)

【讨论】:

  • @Cristik - 对于 Xcode 9.3,Apple 自己建议将 flatMap 替换为 compactMap。虽然,你是对的。让我们检查更多细节和两者之间的比较,帽子应该更好。感谢您的发言。
猜你喜欢
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多