目标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]; } } 

这会导致无限循环,因为在每个步骤中,您都要向数组中插入两个以上的值。 因此,您的arrays增长速度超过了遍历它的速度。 我假设你打算交换这些值。

在任何情况下,更简单和更有效的排序是使用内置排序function:

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