2012-12-20 6 views
1

J'ai un tableau de tableaux. Les premiers éléments du tableau contenu sont tous des objets NSDate. Je voudrais trier le tableau contenant les tableaux dans l'ordre du plus récent au moins. Pour une raison quelconque, l'algorithme de tri ci-dessous entraîne une boucle infinie. Quelqu'un peut m'aider? Je vous remercie.Objectif C: Trier les tableaux bidimensionnels

meilleur ... 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]; 
    } 
} 

Répondre

5

Il en résulte une boucle infinie parce que, à chaque étape, vous insérez deux valeurs dans le tableau. Ainsi votre tableau croît plus vite que vous ne le traversez. Je suppose que vous avez voulu échanger les valeurs.

Dans tous les cas, une sorte beaucoup plus simple et plus efficace est d'utiliser les capacités de tri intégrées:

// 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]]; 
}]; 
+0

Merci beaucoup Kevin. Je n'étais pas au courant de telles capacités de tri intégrées. Cela m'aide énormément. – Skyler

+0

@robmayoff: Euh, merci. Je ne sais pas comment je n'ai pas pensé à ça. –

3

Si array est mutable et que vous voulez faire le tri en place:

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

Si array est immuable ou vous voulez le laisser seul et faire une copie triée:

NSArray *sortedArray = [array sortedArrayUsingComparator:^(id a, id b) { 
    return [b[0] compare:a[0]]; 
}]; 
Questions connexes