最近一直在整APP上能用的知识点,正好整到排序这个知识点,觉得似乎有点淡忘了,所以把他记录下来,和大家分享.这里用到了
#import"ChineseString.h" //此类中有两个Nsstring对象(string和pinyin)用于存放原字符串(中文)和字符串转为拼音的字符串(中文对应的拼音).
#import"pinyin.h"
这两个类可以去我的github上下载: https://github.com/StephentTom/pinyinFile
类似
sortA-Z:为升序; Z-A:为降序.
加入头文件
#import"ChineseString.h"
#import"pinyin.h"
@interfaceViewController()
@property(nonatomic,strong)NSArray*stringsToSort;
@end
@implementationViewController
-(NSArray*)stringsToSort{
if(!_stringsToSort){
_stringsToSort=@[@"谷歌",@"萌萌哒",@"嘿嘿见鬼了",@"推特",@"百度",@"再来一次",@"蜀山",@"键盘",@"鼠标",@"阿门",@"苹果"]; }
return_stringsToSort;
}
//没有排序的列表
for (int i= 0 ;i<self.stringsToSort.count; i++){
NSLog(@"%@\n",[self.stringsToSortobjectAtIndex:i]);
}
未排序// 将中文字符串赋值给类中得字符串,一个中文就是一个ChineseString对象,这里得创建一个可变数组,用来存储ChineseString对象
NSMutableArray *letterResult = [NSMutableArray array];
for(int i =0; i<self.stringsToSort.count; i++)
ChineseString*chineseString = [ [ChineseString alloc] init];
chineseString.string=self.stringsToSort[i];
if(chineseString.string==nil){
chineseString.string=@""; }
NSString *pinYinResult = [NSString string]; //一个中文对应一个 pinYinResult(中文的拼音)
if( ! [chineseString.string isEqualToString: @""])
{
//获取中文每个字的首字母 . letter:字母
for(int j =0; j<chineseString.string.length; j++){
//得到中文中每个字的首字母
NSString*singlePinYinLetter = [[NSStringstringWithFormat:@"%c",pinyinFirstLetter([chineseString.stringcharacterAtIndex:j])] uppercaseString];//中文转拼音首字母的函数: pinyinFirstLetter uppercaseString: 表示大写字母
//拼接中文每个字的首字母,最终得到此中文的拼音
pinYinResult = [pinYinResultstring ByAppendingString: singlePinYinLetter];
}
chineseString.pinYin = pinYinResult ;
}else{
chineseString.pinYin=@"";
}
[letterResulta ddObject:chineseString];
}
NSLog(@"\r\r获取了中文每个字的首字母列表:");
for(int i =0; i < letterResult.count ; i++) {
ChineseString *appendingLetter = letterResult[i];
NSLog(@"中文__%@首字母__%@",appendingLetter.string,appendingLetter.pinYin);
}
未排序 -- 得到每个中文对应的拼音//接下来就是对字母进行排序
// 1> 创建排序描述器
NSSortDescriptor *descriptor = [NSSortDescriptorsortDescriptorWithKey: @"pinYin" ascending:YES]; //yes:升序,反之. pinYin:表示要进行排序的key(kvc),之前我们把中文转为拼音的时候,chineseString.pinYin = pinYinResult ; 我们要排序的就是pinYin
//2> 存放排序器
NSArray *descriptorArray = [NSArray arrayWithObjects: descriptor,nil];
//3>进行排序
NSArray *descriptorResult = [letterResult sortedArrayUsingDescriptors : descriptorArray];
NSLog(@"\r\r排序完成的结果:");
for(int i =0; i<descriptorResult.count; i++){
ChineseString *result = descriptorResult[i];
NSLog(@"原文字__%@字母__%@",result.string,result.pinYin);
}
排序后的结果}@end
网友评论