我有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];
}
}
这给我错误的结果,但我不知道出了什么问题。 谢谢你的帮助。
答案 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
}
}