मैं [UIFont familyNames]
वर्णमाला के क्रम से भरे हुए सरणी को कैसे क्रमबद्ध कर सकता हूं ?
मैं [UIFont familyNames]
वर्णमाला के क्रम से भरे हुए सरणी को कैसे क्रमबद्ध कर सकता हूं ?
जवाबों:
सबसे सरल तरीका है, एक प्रकार का चयनकर्ता प्रदान करना ( विवरण के लिए Apple का प्रलेखन )
उद्देश्य सी
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
तीव्र
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:")
let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])
ऐप्पल वर्णमाला छँटाई के लिए कई चयनकर्ताओं को प्रदान करता है:
compare:
caseInsensitiveCompare:
localizedCompare:
localizedCaseInsensitiveCompare:
localizedStandardCompare:
तीव्र
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
यहां दिए गए अन्य उत्तर @selector(localizedCaseInsensitiveCompare:)
इस बात का उल्लेख करते हैं कि यह एनएसएसट्रिंग की एक सरणी के लिए बहुत अच्छा काम करता है, हालांकि यदि आप इसे किसी अन्य प्रकार की वस्तु तक विस्तारित करना चाहते हैं, और उन वस्तुओं को एक 'नाम' संपत्ति के अनुसार क्रमबद्ध करते हैं, तो आपको इसके बजाय ऐसा करना चाहिए:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
आपकी वस्तुओं को उन वस्तुओं की नाम संपत्ति के अनुसार क्रमबद्ध किया जाएगा।
यदि आप चाहते हैं कि सॉर्टिंग असंवेदनशील हो, तो आपको इस तरह के डिस्क्रिप्टर को सेट करना होगा
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
name
यह एक वैध कुंजी नहीं है। NSSortDescriptor के साथ तार को वर्णानुक्रम में सॉर्ट करने के लिए मुझे किस कुंजी का उपयोग करना चाहिए?
NSNumericSearch जैसी चीज़ों का उपयोग करने के लिए NSString की सूची छाँटने का एक अधिक शक्तिशाली तरीका:
NSArray *sortedArrayOfString = [arrayOfString sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
SortDescriptor के साथ संयुक्त, जो कुछ इस तरह देगा:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {
return [(NSString *)obj1 compare:(NSString *)obj2 options:NSNumericSearch];
}];
NSArray *sortedArray = [anArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
वर्णमाला क्रम में छँटाई के लिए नीचे दिए गए कोड का उपयोग करें:
NSArray *unsortedStrings = @[@"Verdana", @"MS San Serif", @"Times New Roman",@"Chalkduster",@"Impact"];
NSArray *sortedStrings =
[unsortedStrings sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"Unsorted Array : %@",unsortedStrings);
NSLog(@"Sorted Array : %@",sortedStrings);
नीचे कंसोल लॉग है:
2015-04-02 16:17:50.614 ToDoList[2133:100512] Unsorted Array : (
Verdana,
"MS San Serif",
"Times New Roman",
Chalkduster,
Impact
)
2015-04-02 16:17:50.615 ToDoList[2133:100512] Sorted Array : (
Chalkduster,
Impact,
"MS San Serif",
"Times New Roman",
Verdana
)
स्ट्रिंग्स की एक सरणी को सॉर्ट करने के लिए एक और आसान तरीका description
इस तरह से एनएसएसट्रिंग संपत्ति का उपयोग करके होता है :
NSSortDescriptor *valueDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"description" ascending:YES];
arrayOfSortedStrings = [arrayOfNotSortedStrings sortedArrayUsingDescriptors:@[valueDescriptor]];
इसमें पहले से ही अधिकांश उद्देश्यों के लिए अच्छे उत्तर हैं, लेकिन मैं उन्हें जोड़ दूंगा जो अधिक विशिष्ट है।
अंग्रेजी में, आम तौर पर जब हम वर्णमाला करते हैं, तो हम वाक्यांश की शुरुआत में "द" शब्द को अनदेखा कर देते हैं। इसलिए "द यूनाइटेड स्टेट्स" को "U" के तहत ऑर्डर दिया जाएगा और "T" को नहीं।
यह आपके लिए है।
इन श्रेणियों में रखना सबसे अच्छा होगा।
// Sort an array of NSStrings alphabetically, ignoring the word "the" at the beginning of a string.
-(NSArray*) sortArrayAlphabeticallyIgnoringThes:(NSArray*) unsortedArray {
NSArray * sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(NSString* a, NSString* b) {
//find the strings that will actually be compared for alphabetical ordering
NSString* firstStringToCompare = [self stringByRemovingPrecedingThe:a];
NSString* secondStringToCompare = [self stringByRemovingPrecedingThe:b];
return [firstStringToCompare compare:secondStringToCompare];
}];
return sortedArray;
}
// Remove "the"s, also removes preceding white spaces that are left as a result. Assumes no preceding whitespaces to start with. nb: Trailing white spaces will be deleted too.
-(NSString*) stringByRemovingPrecedingThe:(NSString*) originalString {
NSString* result;
if ([[originalString substringToIndex:3].lowercaseString isEqualToString:@"the"]) {
result = [[originalString substringFromIndex:3] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
}
else {
result = originalString;
}
return result;
}
-(IBAction)SegmentbtnCLK:(id)sender
{ [self sortArryofDictionary];
[self.objtable reloadData];}
-(void)sortArryofDictionary
{ NSSortDescriptor *sorter;
switch (sortcontrol.selectedSegmentIndex)
{case 0:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Name" ascending:YES];
break;
case 1:
sorter=[[NSSortDescriptor alloc]initWithKey:@"Age" ascending:YES];
default:
break; }
NSArray *sortdiscriptor=[[NSArray alloc]initWithObjects:sorter, nil];
[arr sortUsingDescriptors:sortdiscriptor];
}