您的位置:首页 > 其它

按照拼音对数组中的中文字符串排序的算法

2015-05-14 15:48 543 查看
按照拼音对数组中的中文字符串排序的算法,不是很难,这里直接放上代码,Demo去最下面找:

注:里面用到一个叫George的牛人写的中文转拼音首字母的函数pinyinFirstLetter,因为内容实在是太多了就不贴上来了。

里面还用到一个叫ChineseString的类,里面只有两个NSString对象(string和pinYin)用于存放原字符串和字符串中每个字的拼音首字母

复制代码

//结果看输出

//Step1:初始化

NSMutableArray *stringsToSort=[NSArray arrayWithObjects:

@"电脑",

@"显示器",

@"你好",

@"推特",

@"乔布斯",

@"再见",

@"暑假作业",

@"键盘",

@"鼠标",

@"谷歌",

@"苹果",

nil];



//Step1输出

NSLog(@"尚未排序的NSString数组:");

for(int i=0;i<[stringsToSort count];i++){

NSLog(@"%@",[stringsToSort objectAtIndex:i]);

}





//Step2:获取字符串中文字的拼音首字母并与字符串共同存放

NSMutableArray *chineseStringsArray=[NSMutableArray array];

for(int i=0;i<[stringsToSort count];i++){

ChineseString *chineseString=[[ChineseString alloc]init];



chineseString.string=[NSString stringWithString:[stringsToSort objectAtIndex:i]];



if(chineseString.string==nil){

chineseString.string=@"";

}



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];



pinYinResult=[pinYinResult stringByAppendingString:singlePinyinLetter];

}

chineseString.pinYin=pinYinResult;

}else{

chineseString.pinYin=@"";

}

[chineseStringsArray addObject:chineseString];

}



//Step2输出

NSLog(@"\n\n\n转换为拼音首字母后的NSString数组");

for(int i=0;i<[chineseStringsArray count];i++){

ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];

NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);

}







//Step3:按照拼音首字母对这些Strings进行排序

NSArray *sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"pinYin" ascending:YES]];

[chineseStringsArray sortUsingDescriptors:sortDescriptors];



//Step3输出

NSLog(@"\n\n\n按照拼音首字母后的NSString数组");

for(int i=0;i<[chineseStringsArray count];i++){

ChineseString *chineseString=[chineseStringsArray objectAtIndex:i];

NSLog(@"原String:%@----拼音首字母String:%@",chineseString.string,chineseString.pinYin);

}



// Step4:如果有需要,再把排序好的内容从ChineseString类中提取出来

NSMutableArray *result=[NSMutableArray array];

for(int i=0;i<[chineseStringsArray count];i++){

[result addObject:((ChineseString*)[chineseStringsArray objectAtIndex:i]).string];

}



//Step4输出

NSLog(@"\n\n\n最终结果:");

for(int i=0;i<[result count];i++){

NSLog(@"%@",[result objectAtIndex:i]);

}



//程序结束



NSLog(@"\n\n\nDemo By Hxy060799");

输出结果这里也贴上了:



Demo:

ChineseSort.zip (78
K) 下载次数:1268
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: