сортировка людей по их роли в компании - PullRequest
2 голосов
/ 21 июля 2010

Я пытаюсь найти хороший способ сортировки людей по их ролям в конкретной компании.Хитрость заключается в том, что человек может иметь одну или несколько ролей в разных компаниях.

На данный момент у меня есть массив объектов «Персона», и у каждого из этих объектов есть NSSet «Роли».объекты, связанные с ним.

Аналогично этому:

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

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

Мне нужен код, способный решить что-то похожее на это:

Сортировать массив лиц по ролям.roleWeight Где Role.companyId = X

Я смотрел на дескрипторы сортировки, но, похоже, их недостаточно для решения проблемы.Любые предложения приветствуются.

Ответы [ 2 ]

1 голос
/ 21 июля 2010

Вы хотите посмотреть на это

Как отсортировать NSMutableArray с пользовательскими объектами в нем?

Основная идея состоит в том, что, учитывая любые два объекта Person, вы должны сказать, как они сравниваются. Один меньше, больше или они одинаковы.

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

Чтобы передать идентификатор компании, я думаю, вам понадобится 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
}
1 голос
/ 21 июля 2010

Предполагая, что вы используете NSArray для хранения данных (возможно, в хранилище CoreData), вы можете использовать NSArrayController.Контроллер поддерживает дескрипторы сортировки и NSPredicate .В вашем случае вам нужен предикат для фильтрации людей (где role.companyId = x) и сортировки дескрипторов для сортировки по roleWeight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...