按照他们在公司中的角色对人进行排序

时间:2010-07-21 18:17:12

标签: iphone objective-c sorting

我试图找到一种通过他们在特定公司中的角色对人进行排序的好方法。令人狡猾的是,一个人可以在不同的公司中担任一个或多个角色。

目前我有一个'Person'对象数组,并且每个对象都有一个与其关联的NSSet的'Roles'对象。

与此类似:

Person
-personId
-personName (NSString)
-personRoles (NSSet)

Role
-roleId (NSNumber)
-roleWeight (NSNumber)
-roleName (NSString)
-companyId (NSNumber)

我需要一些能够解决类似问题的代码:

按Role.roleWeight排序Person数组,其中Role.companyId = X

我一直在看排序描述符,但它们似乎不足以解决这个挑战。欢迎任何建议。

2 个答案:

答案 0 :(得分:1)

假设您使用NSArray存储数据(可能在CoreData存储上),您可以使用NSArrayController。 Controller也支持排序描述符和NSPredicate。在您的情况下,您需要一个谓词来过滤人(其中role.companyId = x)和排序描述符以按角色排序。

答案 1 :(得分:1)

你想看看这个

How to sort an NSMutableArray with custom objects in it?

基本思想是给定任何两个Person对象,你必须说明它们的比较方式。是一个更少,更大,还是一样。

- (NSComparisonResult)compare:(id)otherObject {
    // get the role for self
    // get the role for other object
    // compare their weights
    // return the right result
}

要传递公司ID,我认为你需要sortUsingFunction:context:,这样的功能

static int comparePersonsUsingCompanyID(id p1, id p2, void *context)
{
    // cast context to a company id
    // get the role for p1
    // get the role for p2
    // compare their weights
    // return the right result
}