Сравнение 2 объектов с использованием массива дескрипторов - PullRequest
1 голос
/ 25 сентября 2010

Есть ли функция, которая сравнивает два объекта с использованием массива NSSortDescriptor и возвращает NSComparisonResult? (Помещение их в массив не идентифицирует равенство.)

Ответы [ 2 ]

0 голосов
/ 01 сентября 2017

Это должно работать правильно:

+ (NSComparisonResult)compareObject:(id)firstObject toObject:(id)secondObject withSortDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors {
   NSComparisonResult result;
   NSUInteger index = 0;
   do {
       NSSortDescriptor *sortDescriptor = [sortDescriptors objectAtIndex:index];
       result = [sortDescriptor compareObject:firstObject toObject:secondObject];
       index += 1;
    } while (result == NSOrderedSame && index < sortDescriptors.count);

   return result;
}
0 голосов
/ 25 сентября 2010

Вы могли бы легко написать эту функцию самостоятельно. Просто переберите массив. Сложное дизайнерское решение заключается в том, что делать, когда разные компараторы дают разные результаты. Например. Допустим, мы сравниваем Ferrari и большую кучу грязи, используя массив am с двумя компараторами: стоимость и размер. Ferrari стоит дороже, но куча грязи больше. Что мы говорим "больше"? Это дизайнерское решение, которое вы должны принять на основе вашей конкретной проблемной области.

...