iOS中文排序

iOS中文排序

需要导入4个文件,分别是:ChineseString.h ChineseString.m pinyin.h pinyin.m 。这里写错了一个,不是pinyin.m而是pinyin.c 其他都对。
接着建一个类:ZhonWenPaiXu.m 里面写一个方法:作用是:传入一个中文的数组,返回一个排好顺序的数组。注意,由于这次项目是要对学生对象排序,是先把学生的名字排好顺序,再根据名字把学生排好,所以我是传一个学生的数组。返回一排好顺序的名字的数组。
然后再到主文件里根据排好的名字转换成学生就行了。其实下面的方法到第三步已经排好了。
 

+(NSMutableArray *)zhongWenPaiXu:(NSMutableArray *)newArray{

//中文排序。

NSMutableArray *chineseStringsArray=[NSMutableArray array];

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

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

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

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 = [NSArrayarrayWithObject:[NSSortDescriptorsortDescriptorWithKey:@"pinYin"ascending:YES]];

[chineseStringsArray sortUsingDescriptors:sortDescriptors];

//Step4输出

// 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=[NSMutableArrayarray];

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

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

//Step5输出

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

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

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

} //程序结束

return chineseStringsArray;

}

 
 
 
最后在ViewDidLoad和ViewWillAppear 里添加以下代码就行了。

self.stuArray=[StudentfindAll];

self.tempA=[[NSMutableArrayalloc]init];

ChineseString *tempString1;

NSString *sss;

Student *student1;

for (int i=0; i<[[ZhongWenPaiXu zhongWenPaiXu:stuArray] count]; i++) {

tempString1=[[ZhongWenPaiXu zhongWenPaiXu:stuArray]objectAtIndex:i];

sss=tempString1.string;

student1=[Student findByName:sss];

NSLog(@"sss====%@",sss);

NSLog(@"sss====%@",student1.name);

[tempA addObject:student1];

}

NSLog(@"[[tempA objectAtIndex:0] name]====%@",[[tempAobjectAtIndex:0] name]);

 
最后下面用到数组用tempA代替。
另外说一下做通讯录遇到的问题。1。数据库删除方法delete from 。。。。中间没有*,星号。2,图片类型时用[imageData bytes] 转一下,3,还有 [ NSString stringWithUTF8String :( const char *) sqlite3_column_text (stmt, 3 )];后面的参数不能为空。
4,用到uinavigation的时候,推到下一个页面时候不应该释放,如果释放了回来的时候就出错了。5,选取图片的时候,按钮的方法,一定要声明,否则也出错。

猜你喜欢

转载自zhangmingwei.iteye.com/blog/1877196