合并到数组中时如何对属性键进行排序

我刚刚学习了如何从CoreData数据库中检索属性键并将其放入数组中。除了每次方法运行时,它每次都以不同的顺序生成数据集外,一切正常。我现在只有3个键-名称,性别,类型。

是否可以做一些事情来使每次以相同的顺序遍历键?我将提供更多属性,并使用该信息填充表格视图,因此我希望它保持一致。

["type","sex","name"]
["goat","F","Bob"]

["sex","name","type"]    
["M","Jack","goat"]

["name","type"]
["Bob","goat"]

["type","sex"]
["goat","M"]

["name","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 }
    
}
sibi333 回答:合并到数组中时如何对属性键进行排序

您在评论中有一些非常有经验的人,询问您为什么需要这样做,并指出可能有更好的方法。但是,如果您确定确实需要执行此操作,则可以这样做。

返回排序的键,您实际上并不需要复制它们,因此您的第一个功能将如下所示。

export const lazyWithLatestFrom = <T extends Observable<unknown>[],V>(o: () => [...T]) =>
  concatMap(value => of(value).pipe(withLatestFrom(...o()))) as OperatorFunction<
    V,[V,...{ [i in keyof T]: TypeOfObservable<T[i]> }]
  >;

然后将键传递到返回值的函数中,以按顺序生成值。

func generateAttributeList(_ animal:Animal) -> [String] {

    let dictAttributes = animal.entity.attributesByName
    return dictAttributes.keys.sorted()
}

或更简洁

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
}
本文链接:https://www.f2er.com/1337927.html

大家都在问