取用于从字典中夫特

问题描述:

特定键我有词典这样的阵列中的所有值。取用于从字典中夫特

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"] 

这就是我现在要做的。但我想如果我能做到这一点在一个像使用filtermap ...

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

一个简单的方法是使用flatMap

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

结果:

[“Alex”,“Bob”,“Claire”,“David”]

flatMap斯威夫特就像map但它也安全地解开自选,这是我们需要在这里,因为斯威夫特字典总是返回选配。

+0

那是什么我一直在寻找,谢谢。斯威夫特的岩石! –

+0

不客气。是的,我同意,Swift很棒。 :) – Moritz

这里有两种方法可以做到这一点。如果你很酷使用的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 
+1

感谢您的帮助,它运作良好,但@埃里克的答案似乎是如此简单。向上投票你的答案呢! –