2

textFieldsに従って配列を並べ替えようとしていますframe.origin.y。しかし、シミュレーターを実行すると、スタックしました。何か案が?

IBOutletCollection(UITextField) NSArray *textFields

私のコード:

-(NSMutableArray *)bubbleSort:(NSMutableArray *) unsortedArray{
 NSInteger i,j;
 //NSLog(@"%@",unsortedArray);
 for(i=0;i<unsortedArray.count;i++)
  {
    for(j=0;j<i;j++)
    {
        if(((UITextField *)[unsortedArray objectAtIndex:i]).frame.origin.y > ((UITextField *)[unsortedArray objectAtIndex:j]).frame.origin.y)
        {

            UITextField *temp=[unsortedArray objectAtIndex:i]; 
            [unsortedArray insertObject:[unsortedArray objectAtIndex:j] atIndex:i];
            [unsortedArray insertObject:temp atIndex:j];
        }
    }
  }
  //NSLog(@"%@",unsortedArray);
  return unsortedArray;
}
4

2 に答える 2

2

これは、オブジェクトを配列に挿入し続けるように見えます。したがって、unsortedArray.countは増加し続けます。私の意見では、最初にオブジェクトを削除してから、アルゴリズムに応じて上位ランクまたは下位ランクに挿入する必要があります。

NSMutableArrayオブジェクト挿入関数のドキュメント。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html

于 2013-02-14T03:16:34.420 に答える
2

Learner が言ったように、配列にオブジェクトを挿入し続けるだけなので、外側の for ループから離れることはありません。2 つの要素を交換するには、次を使用できます。

- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2

あなたの場合、あなたの中にif、あなたは単に書くことができます

[unsortedArray exchangeObjectAtIndex:i withObjectAtIndex:j];

参照

于 2013-02-14T03:38:25.977 に答える