我正在尝试根据textFieldsframe.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;
}

最佳答案

就像Learner所说的那样,您只是继续在数组中插入对象,所以您永远不会离开外部for循环。要交换两个元素,可以使用

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


因此,在您的情况下,您可以在if内简单地编写

[unsortedArray exchangeObjectAtIndex:i withObjectAtIndex:j];


Reference

10-08 05:04