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 循环。要交换两个元素,您可以使用

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

所以在你的情况下,在你的内部if,你可以简单地写

[unsortedArray exchangeObjectAtIndex:i withObjectAtIndex:j];

参考

于 2013-02-14T03:38:25.977 回答