Задача C: сортировка двумерного массива

У меня есть массив массивов. Все первые элементы содержащегося массива являются объектами NSDate. Я хотел бы отсортировать массив, содержащий массивы, по порядку от самого последнего к наименьшему. По какой-то причине приведенный ниже алгоритм сортировки приводит к бесконечному циклу. Может кто-нибудь мне помочь? Спасибо.

Лучший...SL

//array is the array containing all of the other arrays(that have NSDates as their first elements)
//temp is the new array being added to the end of the array, to later be sorted into the correct position.

[array addObject:temp];    
NSMutableArray *tempArray;

for (int i=0; i<[array count]; i++) 
{
    NSDate *session1, *session2;
    session1 = [[array objectAtIndex:i] objectAtIndex:0];
    session2 = [[array objectAtIndex:[array count]-1] objectAtIndex:0];

    if([session1 compare:session2] == NSOrderedDescending)
{
        tempArray = [array objectAtIndex:i];
        [array insertObject:[array objectAtIndex:[array count]-1] atIndex:i];
        [array insertObject:tempArray atIndex:[array count]-1];
    }
}

2 ответа

Решение

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

В любом случае, гораздо более простой и эффективный способ сортировки заключается в использовании встроенных возможностей сортировки:

// NSArray *sortedArray, with the unsorted 'array' pulled from some other instance
sortedArray = [array sortedArrayUsingComparator:^(id a, id b) {
    return [[b objectAtIndex:0] compare:[a objectAtIndex:0]];
}];

Если array изменчив, и вы хотите отсортировать его на месте:

[array sortUsingComparator:^(id a, id b) {
    return [b[0] compare:a[0]];
}];

Если array является неизменным или вы хотите оставить его в покое и сделать отсортированную копию:

NSArray *sortedArray = [array sortedArrayUsingComparator:^(id a, id b) {
    return [b[0] compare:a[0]];
}];
Другие вопросы по тегам