2013-02-18 17 views
12

Mam obiekt NSMutableArray, który zawiera obiekty NSIndexPath i chciałbym posortować je według ich row, w porządku rosnącym.Sortowanie tablicy NSIndexPaths

Jaki jest najkrótszy/najprostszy sposób to zrobić?

To co próbowałem:

[self.selectedIndexPaths sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSIndexPath *indexPath1 = obj1; 
    NSIndexPath *indexPath2 = obj2; 
    return [@(indexPath1.section) compare:@(indexPath2.section)]; 
}]; 

Odpowiedz

13

Mówiłeś, że chcesz, aby posortować według row jeszcze porównać section. Dodatkowo, section jest NSInteger, więc nie można na niego wywoływać metod.

zmodyfikować kod w następujący sposób uporządkować na row:

[self.selectedIndexPaths sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { 
    NSInteger r1 = [obj1 row]; 
    NSInteger r2 = [obj2 row]; 
    if (r1 > r2) { 
     return (NSComparisonResult)NSOrderedDescending; 
    } 
    if (r1 < r2) { 
     return (NSComparisonResult)NSOrderedAscending; 
    } 
    return (NSComparisonResult)NSOrderedSame; 
}]; 
+0

dziękuję! rządzisz. – Eric

9

Można również użyć NSSortDescriptors uporządkować NSIndexPath przez „row” mienia.

jeśli self.selectedIndexPath nie jest zmienny:

NSSortDescriptor *rowDescriptor = [[NSSortDescriptor alloc] initWithKey:@"row" ascending:YES]; 
NSArray *sortedRows = [self.selectedIndexPaths sortedArrayUsingDescriptors:@[rowDescriptor]]; 

czy self.selectedIndexPath jest NSMutableArray, po prostu:

NSSortDescriptor *rowDescriptor = [[NSSortDescriptor alloc] initWithKey:@"row" ascending:YES]; 
[self.selectedIndexPaths sortedArrayUsingDescriptors:@[rowDescriptor]]; 

Proste & krótki.

8

Przez zmienny tablicy:

[self.selectedIndexPaths sortUsingSelector:@selector(compare:)]; 

Dla niezmiennej tablicy:

NSArray *sortedArray = [self.selectedIndexPaths sortedArrayUsingSelector:@selector(compare:)] 
3

w Swift:

let paths = tableView.indexPathsForSelectedRows() as [NSIndexPath] 
let sortedArray = paths.sorted {$0.row < $1.row} 
+0

Tak, sortowanie jest znacznie krótsze w językach funkcjonalnych. – kelin

+2

To zadziała tylko wtedy, gdy jest tylko jedna sekcja –

Powiązane problemy