2013-02-18 13 views
12

की एक सरणी को सॉर्ट करना मेरे पास NSMutableArray है जिसमें NSIndexPath ऑब्जेक्ट्स हैं, और मैं उन्हें आरोही क्रम में row द्वारा क्रमबद्ध करना चाहता हूं।NSIndexPaths

ऐसा करने का सबसे छोटा/सरल तरीका क्या है?

यह मैं क्या कोशिश की है है:

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

उत्तर

13

आपने कहा कि आप row द्वारा क्रमबद्ध करना चाहते हैं, फिर भी आप section की तुलना करें। इसके अतिरिक्त, sectionNSInteger है, इसलिए आप इस पर विधियां नहीं कॉल कर सकते हैं।

रूप 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

धन्यवाद! आपने धमाल मचाया। – Eric

9

तुम भी 'पंक्ति' संपत्ति से NSIndexPath सॉर्ट करने के लिए NSSortDescriptors उपयोग कर सकते हैं।

अगर self.selectedIndexPath गैर परिवर्तनशील है:

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

या यदि self.selectedIndexPath एक NSMutableArray है, बस:

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

सरल & कम।

8

एक परिवर्तनशील सरणी के लिए:

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

अपरिवर्तनीय सरणी के लिए:

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

तेज में:

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

हाँ, सॉर्टिंग कार्यात्मक भाषाओं में बहुत छोटा है। – kelin

+2

यह केवल तभी काम करेगा जब केवल एक ही अनुभाग हो –