组合成数组时如何对属性键进行排序
How to sort attribute keys when combining into an array
我刚刚学会了如何从 CoreData 数据库中检索属性键并将它们放入数组中。它工作正常,除了每次运行该方法时,它每次都会以不同的顺序生成数据集。我现在只有 3 个键 - 姓名、性别、类型。
我可以做些什么让它每次都以相同的顺序遍历键吗?我将制作更多属性并使用这些信息来填充表格视图,因此我希望它保持一致。
["type", "sex", "name"]
["Goat", "F", "Bob"]
["sex", "name", "type"]
["M", "Jack", "Goat"]
["name", "sex", "type"]
["Bob", "F", "Goat"]
["type", "name", "sex"]
["Goat", "Jack", "M"]
["name", "sex", "type"]
["Bob", "F", "Goat"]
func generateAttributeList(_ animal:Animal) -> Array<String> {
let dictAttributes = animal.entity.attributesByName
var arrAttributeTitles:Array<String> = []
for (key, _) in dictAttributes {
arrAttributeTitles.append(key)
}
return arrAttributeTitles
}
//makes the Value Array
func generateValueList () {
for (name, _) in animal!.entity.attributesByName {
let animalValue = animal!.value(forKey: name) as! String
childValues.append(animalValue)
}
//var attributesByName: [String : NSAttributeDescription] { get }
}
评论中有一些非常有经验的人质疑您为什么需要这样做,并指出可能有更好的方法。但如果你决定你真的需要这样做,这就是你可以做到的。
Return 键排序,你真的不需要复制它们,所以你的第一个函数看起来像这样。
func generateAttributeList(_ animal:Animal) -> [String] {
let dictAttributes = animal.entity.attributesByName
return dictAttributes.keys.sorted()
}
然后将键传递给 returns 值的函数以按顺序生成值。
func generateValueList (order: [String]) -> [String] {
var childValues = [String]()
for key in order {
let animalValue = animal!.value(forKey: key) as! String
childValues.append(animalValue)
}
return childValues
}
或者更简洁
func generateValueList (order: [String]) -> [String] {
return order.map { animal!.value(forKey: [=12=]) as! String }
}
我刚刚学会了如何从 CoreData 数据库中检索属性键并将它们放入数组中。它工作正常,除了每次运行该方法时,它每次都会以不同的顺序生成数据集。我现在只有 3 个键 - 姓名、性别、类型。
我可以做些什么让它每次都以相同的顺序遍历键吗?我将制作更多属性并使用这些信息来填充表格视图,因此我希望它保持一致。
["type", "sex", "name"]
["Goat", "F", "Bob"]
["sex", "name", "type"]
["M", "Jack", "Goat"]
["name", "sex", "type"]
["Bob", "F", "Goat"]
["type", "name", "sex"]
["Goat", "Jack", "M"]
["name", "sex", "type"]
["Bob", "F", "Goat"]
func generateAttributeList(_ animal:Animal) -> Array<String> {
let dictAttributes = animal.entity.attributesByName
var arrAttributeTitles:Array<String> = []
for (key, _) in dictAttributes {
arrAttributeTitles.append(key)
}
return arrAttributeTitles
}
//makes the Value Array
func generateValueList () {
for (name, _) in animal!.entity.attributesByName {
let animalValue = animal!.value(forKey: name) as! String
childValues.append(animalValue)
}
//var attributesByName: [String : NSAttributeDescription] { get }
}
评论中有一些非常有经验的人质疑您为什么需要这样做,并指出可能有更好的方法。但如果你决定你真的需要这样做,这就是你可以做到的。
Return 键排序,你真的不需要复制它们,所以你的第一个函数看起来像这样。
func generateAttributeList(_ animal:Animal) -> [String] {
let dictAttributes = animal.entity.attributesByName
return dictAttributes.keys.sorted()
}
然后将键传递给 returns 值的函数以按顺序生成值。
func generateValueList (order: [String]) -> [String] {
var childValues = [String]()
for key in order {
let animalValue = animal!.value(forKey: key) as! String
childValues.append(animalValue)
}
return childValues
}
或者更简洁
func generateValueList (order: [String]) -> [String] {
return order.map { animal!.value(forKey: [=12=]) as! String }
}