如何將填充了[UIFont familyNames]
的數組按字母順序排序? 數組
這裏提到的其餘答案提到使用@selector(localizedCaseInsensitiveCompare:)
這適用於NSString數組,可是若是你想將它擴展到另外一種類型的對象,並根據'name'屬性對這些對象進行排序,你應該這樣作相反: spa
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; sortedArray=[anArray sortedArrayUsingDescriptors:@[sort]];
您的對象將根據這些對象的name屬性進行排序。 日誌
若是您但願排序不區分大小寫,則須要像這樣設置描述符 code
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
最簡單的方法是提供排序選擇器( Apple的文檔以獲取詳細信息) 對象
Objective-C的 排序
sortedArray = [anArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
迅速 ip
let descriptor: NSSortDescriptor = NSSortDescriptor(key: "YourKey", ascending: true, selector: "localizedCaseInsensitiveCompare:") let sortedResults: NSArray = temparray.sortedArrayUsingDescriptors([descriptor])
Apple提供了幾種字母排序選擇器: 文檔
compare:
caseInsensitiveCompare:
localizedCompare:
localizedCaseInsensitiveCompare:
localizedStandardCompare:
迅速 get
var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"] students.sort() print(students) // Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"
參考 it
一種更強大的方法來排序NSString列表以使用NSNumericSearch之類的東西:
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]];
-(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]; }
使用下面的代碼按字母順序排序:
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 )