दिलचस्प पोस्ट
जावा में स्ट्रिंग () को ठीक से कैसे ओवरराइड करें? SQL सर्वर गतिशील PIVOT क्वेरी? "\ N" या '\ n' या std :: endl को std :: cout? जावास्क्रिप्ट में हेक्स को दशमलव में कैसे परिवर्तित करना है? आईफोन सिम्युलेटर कहां स्टोर करता है? आईफोन नंबर पैड पर "डोन" बटन कैसे दिखाना है सामान्य तरीके का उपयोग करने के लिए और वाइल्ड-कार्ड का उपयोग कब करना है? एक प्रॉक्सी सर्वर के साथ काम करने के लिए git प्राप्त करना एचटीएमएल। बिगिनकॉलक्शनइटम सहायताकर्ता का उपयोग कर संग्रह से एक आंशिक दृश्य मैं स्वचालित रूप से एक यूट्यूब वीडियो (IFrame API) को कैसे म्यूट करूँ? हेडर केवल कर्ल के माध्यम से पीएचपी में पुनर्प्राप्ति ऑडिओरेक्ड ऑब्जेक्ट प्रारंभ नहीं किया जा रहा है आप एक सी # ऑटो-प्रॉपर्टी को डिफ़ॉल्ट मान कैसे देते हैं? उद्देश्य-सी एकाधिक वंशानुक्रम जेनेरिक TryParse

एक NSArray पर प्राकृतिक रूप कैसे करें?

मेरे पास वस्तुओं की एक सरणी है, और मुझे उनकी "शीर्षक" कुंजी के आधार पर सॉर्ट किया गया है यह वर्तमान में काम कर रहा है, हालांकि यह किसी प्राकृतिक प्रकार के बजाय एएससीआईआई प्रकार का उपयोग कर रहा है शीर्षक फ़ाइल नाम हैं, इसलिए वे इस तरह दिखते हैं:

file1
करें 2
file3

file10
file11
file12

मैं उम्मीद कर रहा हूं:

file1
file10
file11
file12
करें 2
file3

क्या किसी को पता है कि क्या एनएएसआरआरई सॉर्टिंग की कार्यक्षमता में वर्णित रूप से इस प्राकृतिक सॉर्टिंग के लिए अंतर्निहित तरीके से निर्मित किया गया है? मुझे कुछ जेनेरिक एल्गोरिदम मिले, लेकिन मैं कुछ अंतर्निहित के लिए आशा कर रहा था …

वेब के समाधान से एकत्रित समाधान "एक NSArray पर प्राकृतिक रूप कैसे करें?"

एनएसएसटीरिंग एस की तुलना एनएसएन्यूमेरिक खोज तुलना विकल्प से की जा सकती है।

एक संस्करण:

 NSInteger sort(Obj* a, Obj* b, void*) { return [[a title] compare:[b title] options:NSNumericSearch]; } result = [array sortedArrayUsingFunction:&sort context:nil]; 

या थोड़ा अधिक सामान्य:

 NSInteger sort(id a, id b, void* p) { return [[a valueForKey:(NSString*)p] compare:[b valueForKey:(NSString*)p] options:NSNumericSearch]; } result = [array sortedArrayUsingFunction:&sort context:@"title"] 

या ब्लॉक का उपयोग कर:

 result = [array sortedArrayUsingComparator:^(Obj* a, Obj* b) { return [[a title] compare:[b title] options:NSNumericSearch]; }]; 

मैक ओएस एक्स 10.6 और बाद में और आईओएस 4 और बाद में फाइंडर के सॉर्टिंग व्यवहार को दोहराने का प्रयास करने वाले लोग localizedStandardCompare: उपयोग कर सकते हैं localizedStandardCompare: तुलनित्र चयनकर्ता के रूप में

मैक ओएस एक्स और / या आईओएस के पिछले संस्करणों पर समान लक्ष्य वाले लोग स्ट्रिंग प्रोग्रामिंग गाइड में वर्णित समाधान का उपयोग करना चाहिए।

@ पीटरहोसी के उत्तर के आधार पर, यदि आप स्ट्रिंग ऑब्जेक्ट्स की एक सरणी के साथ काम कर रहे हैं:

संक्षिप्त जवाब:

 NSArray *orderedTitles = [unorderedTitles sortedArrayUsingSelector:@selector(localizedStandardCompare:)]; 

पूर्ण उदाहरण:

 NSArray *unorderedTitles = @[ @"file12", @"file1", @"file10", @"file3", @"file2", @"file11" ]; NSArray *orderedTitles = [unorderedTitles sortedArrayUsingSelector:@selector(localizedStandardCompare:)]; NSLog(@"orderedTitles = %@", orderedTitles); /* orderedTitles = ( file1, file2, file3, file10, file11, file12 ) */ 

यह आईओएस पर काम करता है

 NSString *name0 = @"winter"; NSString *name1 = @"summer"; CFComparisonResult result = CFStringCompareWithOptions( (CFStringRef) name0, (CFStringRef) name1, CFRangeMake (0, CFStringGetLength((CFStringRef) name0)), kCFCompareCaseInsensitive | kCFCompareLocalized | kCFCompareNumerically ); 

आप निम्नलिखित तरीके से सॉर्टिंग भी कर सकते हैं:

 NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES selector:@selector(localizedStandardCompare:)]; NSArray *sortedItems = [unsortedItems sortedArrayUsingDescriptors:@[sortDescriptor]];