代碼已上傳GitHub https://github.com/6357/YUChineseSorting.githtml
參考http://www.cnblogs.com/syxchina/archive/2012/10/11/2720257.htmlgit
1、須要導入頭文件pinyin.h這裏有下載地址http://download.csdn.net/detail/u013873967/6991579github
這是我寫的完整代碼,歡迎你們學習交流,幫我改進。http://download.csdn.net/detail/u013873967/6992825api
2、ChineseString.h數組
#import <Foundation/Foundation.h> #import "pinyin.h" @interface ChineseString : NSObject @property(strong,nonatomic)NSString *string; @property(strong,nonatomic)NSString *pinYin; //----- 返回tableview右方indexArray +(NSMutableArray*)IndexArray:(NSArray*)stringArr; //----- 返回聯繫人 +(NSMutableArray*)LetterSortArray:(NSArray*)stringArr; ///---------------------- //返回一組字母排序數組(中英混排) +(NSMutableArray*)SortArray:(NSArray*)stringArr; @end
3、ChineseString.cpp學習
#import "ChineseString.h" @implementation ChineseString @synthesize string; @synthesize pinYin; #pragma mark - 返回tableview右方 indexArray +(NSMutableArray*)IndexArray:(NSArray*)stringArr { NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr]; NSMutableArray *A_Result = [NSMutableArray array]; NSString *tempString ; for (NSString* object in tempArray) { NSString *pinyin = [((ChineseString*)object).pinYin substringToIndex:1]; //不一樣 if(![tempString isEqualToString:pinyin]) { // NSLog(@"IndexArray----->%@",pinyin); [A_Result addObject:pinyin]; tempString = pinyin; } } return A_Result; } #pragma mark - 返回聯繫人 +(NSMutableArray*)LetterSortArray:(NSArray*)stringArr { NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr]; NSMutableArray *LetterResult = [NSMutableArray array]; NSMutableArray *item = [NSMutableArray array]; NSString *tempString; //拼音分組 for (NSString* object in tempArray) { NSString *pinyin = [((ChineseString*)object).pinYin substringToIndex:1]; NSString *string = ((ChineseString*)object).string; //不一樣 if(![tempString isEqualToString:pinyin]) { //分組 item = [NSMutableArray array]; [item addObject:string]; [LetterResult addObject:item]; //遍歷 tempString = pinyin; }else//相同 { [item addObject:string]; } } return LetterResult; } /////////////////// // //返回排序好的字符拼音 // /////////////////// +(NSMutableArray*)ReturnSortChineseArrar:(NSArray*)stringArr { //獲取字符串中文字的拼音首字母並與字符串共同存放 NSMutableArray *chineseStringsArray=[NSMutableArray array]; for(int i=0;i<[stringArr count];i++) { ChineseString *chineseString = [[ChineseString alloc]init]; chineseString.string = [NSString stringWithString:[stringArr objectAtIndex:i]]; if(chineseString.string == nil){ chineseString.string = @""; } //去除兩端空格和回車 chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //此方法存在一些問題 有些字符過濾不了 //NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:;()¥「」"、[]{}#%-*+=_\\|~<>$€^•'@#$%^&*()_+'\""]; //chineseString.string = [chineseString.string stringByTrimmingCharactersInSet:set]; //這裏我本身寫了一個遞歸過濾指定字符串 RemoveSpecialCharacter chineseString.string = [ChineseString RemoveSpecialCharacter:chineseString.string]; // NSLog(@"string====%@",chineseString.string); //判斷首字符是否爲字母 NSString *regex = @"[A-Za-z]+"; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex]; NSString *initialStr = [chineseString.string length]?[chineseString.string substringToIndex:1]:@""; if ([predicate evaluateWithObject:initialStr]) { NSLog(@"chineseString.string== %@",chineseString.string); //首字母大寫 chineseString.pinYin = [chineseString.string capitalizedString] ; }else{ if(![chineseString.string isEqualToString:@""]){ NSString *pinYinResult = [NSString string]; for(int j=0;j<chineseString.string.length;j++){ NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c", pinyinFirstLetter([chineseString.string characterAtIndex:j])]uppercaseString]; // NSLog(@"singlePinyinLetter ==%@",singlePinyinLetter); pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter]; } chineseString.pinYin = pinYinResult; }else{ chineseString.pinYin = @""; } } [chineseStringsArray addObject:chineseString]; } //按照拼音首字母對這些Strings進行排序 NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]]; [chineseStringsArray sortUsingDescriptors:sortDescriptors]; // for(int i=0;i<[chineseStringsArray count];i++){ // NSLog(@"chineseStringsArray====%@",((ChineseString*)[chineseStringsArray objectAtIndex:i]).pinYin); // } NSLog(@"-----------------------------"); return chineseStringsArray; } #pragma mark - 返回一組字母排序數組 +(NSMutableArray*)SortArray:(NSArray*)stringArr { NSMutableArray *tempArray = [self ReturnSortChineseArrar:stringArr]; //把排序好的內容從ChineseString類中提取出來 NSMutableArray *result = [NSMutableArray array]; for(int i=0;i<[stringArr count];i++){ [result addObject:((ChineseString*)[tempArray objectAtIndex:i]).string]; NSLog(@"SortArray----->%@",((ChineseString*)[tempArray objectAtIndex:i]).string); } return result; } //過濾指定字符串 裏面的指定字符根據本身的須要添加 過濾特殊字符 +(NSString*)RemoveSpecialCharacter: (NSString *)str { NSRange urgentRange = [str rangeOfCharacterFromSet: [NSCharacterSet characterSetWithCharactersInString: @",.?、 ~¥#&<>《》()[]{}【】^@/£¤|§¨「」『』¢¬ ̄~@#&*()——+|《》$_€"]]; if (urgentRange.location != NSNotFound) { return [self RemoveSpecialCharacter:[str stringByReplacingCharactersInRange:urgentRange withString:@""]]; } return str; }
4、UITableViewController.cppatom
- (void)viewDidLoad { self.title = @"個人好友"; [super viewDidLoad]; NSArray *stringsToSort=[NSArray arrayWithObjects: @"¥hhh, .$",@" ¥Chin ese ",@"開源中國 ",@"www.oschina.net", @"開源技術",@"社區",@"開發者",@"傳播", @"2013",@"100",@"中國",@"暑假做業", @"鍵盤", @"鼠標",@"hello",@"world", nil]; self.indexArray = [ChineseString IndexArray:stringsToSort]; self.letterResultArr = [ChineseString LetterSortArray:stringsToSort]; }
Loglua