2

我有带有参数NSMutableArray的对象。我必须按此参数对对象进行排序。LinkByte 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];
        }
    }

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

4

2 回答 2

5

对数组进行排序的最简单方法是使用NSSortDescriptorKVC,如下所示:

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]];
于 2012-05-22T08:40:30.520 回答
1

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

for (Byte j = 1; j < [linksArray count]; j++) {
    for (Byte i = 0; i < [linksArray count]-j; i++) {
        //your code from above
    }
}
于 2012-05-22T08:41:29.833 回答