13

NSMutableArrayオブジェクトを含むがあり、それらを で昇順NSIndexPathにソートしたいと考えています。row

それを行うための最短/最も簡単な方法は何ですか?

これは私が試したことです:

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

4 に答える 4

13

で並べ替えたいと言いましたがrow、比較しsectionます。さらに、sectionisNSIntegerであるため、メソッドを呼び出すことはできません。

でソートするには、次のようにコードを変更します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;
}];
于 2013-02-18T03:02:13.913 に答える
10

NSSortDescriptors を使用して、「行」プロパティで NSIndexPath を並べ替えることもできます。

self.selectedIndexPath可変でない場合:

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

または の場合self.selectedIndexPathNSMutableArray、単純に:

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

シンプル&ショート。

于 2013-06-18T12:36:13.030 に答える
8

可変配列の場合:

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

不変配列の場合:

NSArray *sortedArray = [self.selectedIndexPaths sortedArrayUsingSelector:@selector(compare:)]
于 2014-06-13T14:55:47.227 に答える