组合成数组时如何对属性键进行排序

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 }
}