【问题标题】:Fetch all values for a particular key from a Dictionary in Swift从 Swift 中的字典中获取特定键的所有值
【发布时间】:2016-05-07 16:37:30
【问题描述】:

我有一个这样的字典数组。

let arr = [["EmpName"   :   "Alex",     "Designation"   :   "Jr. Developer"],
           ["EmpName"   :   "Bob",     "Designation"   :   "Sr. Developer"],
           ["EmpName"   :   "Claire",  "Designation"   :   "Jr. Developer"],
           ["EmpName"   :   "David",   "Designation"   :   "Project Manager"]]

现在我只想从中获取 EmpName 对象。我该如何快速做到这一点?我基本上想要一个具有以下值的数组。

["Alex", "Bob", "Claire", "David"]

这就是我现在所做的。但我想知道我是否可以通过使用filter 或map 来一次性完成此操作...

var employees = [String]()
    for empRecord in arr {
        employees.append(empRecord["EmpName"]!)
    }

【问题讨论】:

    标签: ios arrays swift dictionary


    【解决方案1】:

    一个简单的方法是使用flatMap:

    let employees = arr.flatMap { $0["EmpName"] }
    

    结果:

    [“亚历克斯”、“鲍勃”、“克莱尔”、“大卫”]

    flatMap 在 Swift 中类似于 map,但它也可以安全地解开可选项,这是我们在这里需要的,因为 Swift 字典总是返回可选项。

    【讨论】:

      【解决方案2】:

      这里有两种方法。如果您喜欢使用 NSArray,我是该解决方案的粉丝。

      let arr = [["EmpName"   :   "Alex",     "Designation"   :   "Jr. Developer"],
          ["EmpName"   :   "Bob",     "Designation"   :   "Sr. Developer"],
          ["EmpName"   :   "Claire",  "Designation"   :   "Jr. Developer"],
          ["EmpName"   :   "David",   "Designation"   :   "Project Manager"]]
      
      let names = arr.map { (dictionary) -> String? in
          return dictionary["EmpName"]
      }
      // names now contains array of names as String?
      
      // If you want to use NSArray
      let newArray = arr as NSArray
      let newNames = newArray.valueForKeyPath("EmpName")
      
      // newNames now contains array of names as String
      

      【讨论】:

      • 感谢您的帮助,效果很好,但@Eric 的回答似乎很简单。也为你的答案投票!!!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      相关资源
      最近更新 更多