2012-05-22 45 views
2

我有NSMutableArray对象Link其参数Byte taskOne。我必须通过此参数对对象进行排序。如何按对象的参数对NSMutableArray进行排序

for (Byte i = 0; i < [linksArray count]-1; i++) { 
     Link *l = [linksArray objectAtIndex:i]; 
     Link *lNext = [linksArray objectAtIndex:i+1]; 
     if (l.taskOne >= lNext.taskOne) { 
      NSLog(@"%d >= %d", l.taskOne, lNext.taskOne); 
      [linksArray replaceObjectAtIndex:i withObject:lNext]; 
      [linksArray replaceObjectAtIndex:i+1 withObject:l]; 
     } 
    } 

这给了我错误的结果,但我不知道什么是错的。 感谢您的帮助。

+0

参考[这里](http://stackoverflow.com/questions/1348748/how-to-sort-an-nsmutablearray-of-managed-objects-through-an-object-图)链接。 –

回答

5

到数组排序的最简单方法是使用NSSortDescriptor与KVC,像这样:

NSArray *linksArray; // Assume that this contains objects which respond to the -taskOne method 

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"taskOne" ascending:YES]; 
NSArray *sortedLinks = [linksArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

这将创建一个新的阵列。排序到位的NSMutableArray,这样做:

NSMutableArray *linksArray; // Assume that this contains objects which respond to the -taskOne method 

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"taskOne" ascending:YES]; 
[linksArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 
+0

它不工作:/ http://pastebin.com/RzM2pKJf –

+1

'sortedArrayUsingDescriptors:'返回一个新的数组;它不会在原地排序。如果你想在原地排序,使用'sortUsingDescriptors:'。 – Wevah

+1

@TomaszSzulc对不起,我错过了它是一个可变数组。我已经添加了第二个示例,显示如何使用'NSSortDescriptor'来进行就地排序。 –

1

这看起来像是一种冒泡的,但你需要两个循环。目前,您在阵列中运行一次,最高的对象应该位于最新的索引处。现在您需要遍历数组,直到长度为1。尝试是这样的:

for (Byte j = 1; j < [linksArray count]; j++) { 
    for (Byte i = 0; i < [linksArray count]-j; i++) { 
     //your code from above 
    } 
} 
+0

感谢您的帮助。它正在工作; ) –

相关问题