我想按对象数组与另一个对象数组共享的属性对其进行排序
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
比较以获得必须在屏幕上显示此内容的顺序。
关于如何实现的任何想法?
谢谢!
答案 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
,而String
是fixedContentTypeId
。我认为这是在准备问题时引入的错字,而实际上它们都是Int
。如果它们的类型确实不同(这很奇怪),则解决方案将相似,尽管您必须进行一些转换。但是我不想去那里,除非您确认这确实是您的模型。
但是,假设您的Int
确实是typeId
,则可以将字典设为String
:
[String: Int]