1

私は配列の配列を持っています。含まれる配列の最初の要素はすべて 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];
    }
}
4

2 に答える 2

6

これは、すべてのステップでさらに 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]];
}];
于 2012-12-20T21:19:14.720 に答える
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]];
}];
于 2012-12-20T21:20:13.263 に答える