2012-12-20 61 views
1

我有一个数组数组。包含数组的第一个元素是所有NSDate对象。我想按从最近到最少的顺序对包含数组的数组进行排序。出于某种原因,下面的排序算法会导致无限循环。谁能帮我吗?谢谢。Objective C:排序二维数组

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

回答

5

这将导致一个无限循环,因为在每一个步骤,你将两个值到数组。因此,你的数组的增长速度比你遍历它快。我假设你打算交换价值。

在任何情况下,更简单,更高效的排序是使用内置的排序功能:

// 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

非常感谢凯文。我不知道这样的内置分类功能。这对我非常有帮助。 – Skyler

+0

@robmayoff:恩,谢谢。不知道我怎么没有想到这一点。 –

3

如果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]]; 
}];