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=[[NSStringstringWithFormat:@"%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];  

 

 

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

    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=[Student findAll];

 

    self.tempA=[[NSMutableArray alloc]init];

    ChineseString *tempString1;

    NSString *sss;

    Student *student1;

    for (int i=0; i<[[ZhongWenPaiXu zhongWenPaiXu:stuArraycount]; 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]====%@",[[tempA objectAtIndex:0name]);


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