目标C:排序二维数组

时间:2012-12-20 21:11:18

标签: ios sorting nsdate

我有一个数组数组。包含的数组的第一个元素都是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 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分: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]];
}];