Swift-按另一个数组的属性对对象数组进行排序

时间:2019-03-15 23:20:39

标签: arrays swift sorting object

我想按对象数组与另一个对象数组共享的属性对其进行排序

    struct GeneralComposition : Decodable {
        let id, formId, relationId, fixedContentTypeId, separatorId: Int
        let orderBy: Int

    }
    struct FixedContentType: Decodable {
        let name, htmlType: String
        let isEditable: Int
        let typeId : String


    }



   var fixedContentType = [FixedContentType]()
   var generalComposition = [GeneralComposition]()

GeneralComposition中,我用orderBy得到了物品必须具有的顺序,然后取每个物品的fixedContentTypeID,与typeId中的FixedContentType比较以获得必须在屏幕上显示此内容的顺序。

关于如何实现的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以为fixedContentTypeID中的generalComposition个字典:

let order = generalComposition.reduce(into: [Int: Int]()) { result, value in
    result[value.fixedContentTypeId] = value.orderBy
}

您现在有了一种有效的方法,可以在orderBy对象数组中查找给定typeId的{​​{1}}值。您可以将其用于排序:

FixedContentType

顺便说一句,您的fixedContentType.sort { (order[$0.typeId] ?? 0) < (order[$1.typeId] ?? 0) } typeId,而StringfixedContentTypeId。我认为这是在准备问题时引入的错字,而实际上它们都是Int。如果它们的类型确实不同(这很奇怪),则解决方案将相似,尽管您必须进行一些转换。但是我不想去那里,除非您确认这确实是您的模型。

但是,假设您的Int确实是typeId,则可以将字典设为String

[String: Int]