联合两个不同对象的两个数组

时间:2016-07-12 15:05:49

标签: ios arrays swift nspredicate

我有两个不同对象的两个数组

对象1:

Class  partner {
    var pImage: String?
    var pTimeStamp: NSDate?
    var pTitle: String?
    var ID: String?
}

对象2:

Class  customer {
    var cImage: String?
    var cTimeStamp: NSDate?
    var cTitle: String?
    var ID: String?
    var isCustomer : Bool? 
}

我想在这两个array array中创建一个objects(当然,以有效的方式),以便没有合作伙伴和<具有相同 ID cID,pID )的strong>客户对象应在新Array内重复。 基于ID的这两个数组的基本联合。请帮忙。

编辑: 这些对象存储在CoreData中,当我想要上面所需的结果时,我已经有两个这些对象的数组

1 个答案:

答案 0 :(得分:1)

超级聪明的方法是让Set为你做所有工作。使这些对象采用具有ID属性的通用协议。将该协议的相等性定义为具有相同的ID值。现在,如果您不关心顺序,则将数组强制设置为Set并将其合并。如果你关心订单,你将不得不使用NSOrderedSet。执行union操作后,您可以强制返回Array。

替代方案(“哑”方式)是循环通过数组,构建一个字典,其键是ID值。就像基于ID相等的集合一样,这可以防止您尝试避免重复。它并不低效,因为你只通过每个数组循环一次,并且字典键的查找速度很快。构建字典后,转换回数组。但是,除非您采取其他措施,否则您将失去原始数组顺序。

(但是,这两个答案都假设您愿意修改您的对象,以便它们甚至可以存在于一个共同的集合中;事实上,它们不能,因为它们是两个不相关的类型。)