2011-09-20 14 views
11

मेरे पास ऑब्जेक्ट्स की एक श्रृंखला है और इसे रेटिंग द्वारा क्रमबद्ध करने और वोटों की संख्या के बाद क्रमबद्ध करने की आवश्यकता है (ताकि यदि दो 5 सितारे रेट किए गए तत्वों की तुलना करें, तो सबसे अधिक वोट वाला पहला होना चाहिए)एकाधिक सॉर्ट डिस्क्रिप्टरों को सेट करना

क्या दो वर्णनकर्ताओं द्वारा एनएसएआरएआरई को सॉर्ट करना संभव है: रेटिंग के बाद पहले और फिर वोटों के बाद?

मैं पर http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/Reference/Reference.html

कुछ sortUsingDescriptors: की तरह मिल गया है, लेकिन मैं इसे कहीं भी डॉक्स में नहीं मिल रहा, लगता है कि यह पदावनत है सकते हैं।

उत्तर

29

हाँ आप कर सकते हैं:

NSSortDescriptor *sortRating = [[NSSortDescriptor alloc] initWithKey:@"rating" ascending:NO]; 
NSSortDescriptor *sortVotes = [[NSSortDescriptor alloc] initWithKey:@"votes" ascending:NO]; 

NSArray *sortedArray = [orignalAray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortRating, sortVotes, nil]]; 
[sortRating release], sortRating = nil; 
[sortVotes release], sortVotes = nil; 
1

आप मूल रूप से सही हैं। एनएसएआरएआरई पर

- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors 

विधि है। यह विभिन्न वर्णनकर्ताओं के अनुसार क्रमबद्ध एक नई सरणी लौटाएगा।

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors 

मौजूद है, लेकिन NSMutableArray, जो स्पष्ट करने वाले क्यों आप इसे NSArray के लिए दस्तावेज में नहीं मिल सकता है पर है। यह एक ही लक्ष्य पूरा करता है, लेकिन एक नई सरणी लौटने के बजाय, जिस सरणी को आप इसे कॉल करते हैं उसे टाइप करता है। न तो बहिष्कृत है।

0

उपयोग - (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors। यहाँ प्रलेखन है: NSArrayClass Reference

उदा:

NSSortDescriptor *sortRating = nil; 
NSSortDescriptor *sortDate = nil; 

NSSortDescriptor *sortRating = [[NSSortDescriptor alloc] initWithKey:@"rating" ascending:NO]; 
NSSortDescriptor *sortDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO]; 
NSArray *sortedArray = [auxArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortRating,sortDate,nil]]; 

[sortRating release]; 
sortRating = nil; 

[sortDate release]; 
sortDate = nil; 

चीयर्स!

+0

आपका कोड संकलन नहीं होगी और आप sortRating और sortDate – rckoenes

+0

लीक कर रहे हैं फिर भी संकलन नहीं होंगे। इसका संकलन करने का कारण यह नहीं है क्योंकि आप 'sortRating' और' sortDate' नामों के चर नामों को फिर से परिभाषित कर रहे हैं। इसके अलावा आप 'sortDescriptor' नामक ऑब्जेक्ट को रिलीज़ कर रहे हैं जिसे परिभाषित नहीं किया गया है और आप' sortRating' और 'sortDate'' जारी नहीं करते हैं। – rckoenes

1

यहां एक-लाइनर है।

NSArray *sortedArray = [unsortedArray sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor [email protected]"rating" ascending:NO], [NSSortDescriptor [email protected]"date" ascending:NO], nil]]; 
0

यदि आप एक NSArray का उपयोग किया है यह एक:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"x_date" ascending:TRUE]; 
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"x_time" ascending:TRUE]; 
[tempArray sortUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor,sortDescriptor1, nil]]; 
संबंधित मुद्दे