取用于从字典中夫特
问题描述:
特定键我有词典这样的阵列中的所有值。取用于从字典中夫特
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"]!)
}
答
一个简单的方法是使用flatMap
:
let employees = arr.flatMap { $0["EmpName"] }
结果:
[“Alex”,“Bob”,“Claire”,“David”]
flatMap
斯威夫特就像map
但它也安全地解开自选,这是我们需要在这里,因为斯威夫特字典总是返回选配。
答
这里有两种方法可以做到这一点。如果你很酷使用的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
感谢您的帮助,它运作良好,但@埃里克的答案似乎是如此简单。向上投票你的答案呢! –
那是什么我一直在寻找,谢谢。斯威夫特的岩石! –
不客气。是的,我同意,Swift很棒。 :) – Moritz