2011-12-22 17 views
5

संभव डुप्लिकेट:
What is the most efficient way to sort an NSSet?उद्देश्य-सी प्रकार एनएसएसट्रिंग्स के एनएसएमयूटेबलसेट?

मैं वर्तमान में स्ट्रिंग की एक सूची निम्नलिखित के साथ एक NSMutableSet है। उदाहरण के लिए: {@ "सी", @ "डी", @ "ई", @ "f", @ "जी", @ "एक"}

कोई मुझे बता सकते हैं कि कैसे मैं इन सॉर्ट कर सकते हैं वर्णानुक्रम मूल्य? sortedArrayUsingDescriptors: का उपयोग करके ऐसा करने का कोई तरीका है?

+1

http://stackoverflow.com/questions/1351182/how-to-sort-a-nsarray-alphabetically –

+1

उपर्युक्त पोस्ट का चयनकर्ता एनएसएससेट पर उपलब्ध है। ध्यान दें कि यह अब एक सेट नहीं होगा। Arrays आदेश दिया जाता है, सेट नहीं हैं। –

+0

मैं कहूंगा कि यह ** ** ** उस प्रश्न का डुप्लिकेट नहीं है। विशेष रूप से, वह अन्य, अधिक सामान्य प्रश्न इस विशेष किनारे के मामले में वर्णनकर्ता को कैसे बनाया जाए, इस पर शून्य सहायता प्रदान करता है, और यह उतना स्पष्ट नहीं है जितना दिखता है, क्योंकि पहली बात आपको लगता है, "लेकिन मैं आधारित सॉर्ट करना नहीं चाहता ऑब्जेक्ट पर एक कुंजी पर; मैं ऑब्जेक्ट के आधार पर सॉर्ट करना चाहता हूं "। बेशक, जवाब यह है कि "स्वयं" कुंजी आपको यह देती है, लेकिन उन लोगों के लिए जो कुंजी-मूल्य कोडिंग को पीछे और आगे नहीं जानते हैं, यह विशेष रूप से स्पष्ट नहीं है। :-) – dgatwood

उत्तर

15

ज़रूर, आपको लगता है कि विधि का उपयोग कर सकते हैं:

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES]; 
NSArray *sortedArray = [mySet sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]; 

यह सिर्फ एक नए प्रकार वर्णनकर्ता निर्दिष्ट कुंजी "विवरण" बनाता है (NSString एक -description तरीका प्रदान करता है जो स्ट्रिंग देता है)। इसके बाद -sortedArrayUsingDescriptors: पर पैरामीटर के रूप में उस क्रम वर्णनकर्ता युक्त एक सरणी गुजरती है, जिसे आप किसी भी एनएसएसटी को भेज सकते हैं।

+0

यदि आप कुंजी के रूप में "स्वयं" पास करते हैं, तो आपको वही परिणाम मिलते हैं। मुझे लगता है कि विवरण कुंजी का अनुरोध करके, आप वास्तव में अतिरिक्त काम कर रहे हैं। विशेष रूप से, मुझे लगता है कि यह अनुरोधित कुंजी के मान पर वर्णन विधि को कॉल करके सॉर्टिंग के लिए उपयोग करने के लिए मान प्राप्त करता है, इसलिए आप वास्तव में विवरण का विवरण ले रहे हैं)। – dgatwood

+0

@ डगलवुड आप मुझे इसे हराया। मैंने बस एनएसएसटींग्स ​​की सरणी को सॉर्ट करने के लिए कुछ कोड लिखा और कुंजी के लिए @ "self" रखने का फैसला किया। यह देखने के लिए यहां आया कि क्या कोई विकल्प था या नहीं। – pnizzle

+0

@dgatwood आप गलत नहीं हैं, लेकिन * विवरण * का उपयोग करके थोड़ा और मजबूत है कि यह कार्य करता है भले ही सरणी में ऐसी वस्तुएं हों जो तार नहीं हैं। चाहे वह वास्तव में वांछनीय है, राय की बात है क्योंकि ओपी ने यह निर्दिष्ट किया था कि वस्तुएं तार हैं, लेकिन साथ ही अतिरिक्त काम की मात्रा नगण्य है। – Caleb

-2

एनएसएससेट अनियंत्रित संग्रह हैं। यदि आप एक सॉर्ट किए गए कंटेनर चाहते हैं, तो एनएसएआरएआरई का उपयोग करें।

1

मुझे लगता है कि इस सवाल का Sorting NSSet अपने बहुत सवाल का जवाब है जा रहा हूँ। क्लिक करने के लिए कड़ी मेहनत ... के लिए

[mySet sortedArrayUsingDescriptors:descriptors]; 
संबंधित मुद्दे