Сортировать NSMutableArray с объектами с uniqueID - PullRequest
0 голосов
/ 14 сентября 2011

Я просмотрел сеть и знаю, что одним из способов сортировки NSMutableArray является использование sortUsingSelector:.Но я все еще немного не в себе, что именно нужно сделать.Я знаю, что метод сравнения должен возвращать NSOrderedAscending или NSOrderedDescending, чтобы выполнить сортировку, но мне нужна дополнительная помощь.

У меня есть массив объектов Block.Каждый блок имеет уникальный идентификатор от 1 до 200+.Я хотел бы отсортировать массив на основе уникальных идентификаторов объектов Block.Возможно ли это?

NSMutableArray *array = [[NSMutableArray alloc] init];
for (unsigned i = 0; i < 221; i++) {
    Block *block = [[Block alloc] init];
    block.uniqueId = i;
    [array addObject:block];
    [block release];
}

Теперь, очевидно, этот массив отсортирован после инициализации, но я добавляю и удаляю блоки позже, и хотел бы прибегнуть к массиву позже.Пожалуйста, помогите!

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Другой вариант - использование дескрипторов сортировки. Они основаны на свойствах внутри объекта. Вы можете сделать это в одну строку следующим образом:

NSArray* sorted =[array sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"uniqueId" ascending:YES]]];

или создайте их отдельно

NSSortDescriptor* idDescriptor=[NSSortDescriptor sortDescriptorWithKey:@"uniqueID" ascending:YES]
NSArray* descriptors=[NSArray arrayWithObject: idDescriptor];
NSArray* sortedArray=[array sortedArrayUsingDescriptors: descriptors];

С помощью этой опции вы можете указать несколько уровней сортировки, добавив несколько NSSortDescriptors в массив дескрипторов.

1 голос
/ 14 сентября 2011
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id o1, id o2) {
    int id1 = ((Block *)o1).uniqueId;
    int id2 = ((Block *)o2).uniqueId;

    if (id1 == id2) {
        return NSOrderedSame;
    }
    if (id1 < id2) {
        return NSOrderedAscending;
    }
    return NSOrderedDescending;
}];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...