如何按对象的参数对NSMutableArray进行排序

时间:2012-05-22 08:35:07

标签: objective-c sorting nsmutablearray

我有NSMutableArray个对象Link,其中包含参数Byte taskOne。我必须通过这个参数对对象进行排序。

    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];
        }
    }

这给我错误的结果,但我不知道出了什么问题。 谢谢你的帮助。

2 个答案:

答案 0 :(得分: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]];

答案 1 :(得分:1)

这看起来像一种bubblesort,但你需要两个循环。目前你在数组中运行一次,最高的对象应该是最新的索引。现在你需要遍历数组直到length-1。尝试这样的事情:

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