2012-05-22 143 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

感謝您的幫助。它正在工作; ) –

相關問題