汉字字符串排序,如人名排序

来源:互联网 发布:淘宝退换货流程图 编辑:程序博客网 时间:2024/06/04 18:36

在写通讯录时经常需要对人名进行 A->Z的排序,在网上已有好多demo,有朋友说使用 NSString的 localizedCompare 方法可以实现字符串比较,在通过数组的sortedArrayUsingComparator方法排序即可,小菜也做了尝试,结果未能如预期所想。

下面来讲讲小菜的做法吧:
1.准备获取汉字首字母的开源库,NSString + pinyin ,在 github 上有大把,需要请自行下载
2.使用递归对汉字字符串排序……开始吧,请看代码

//递归方法, 逐字取首字母排序

-(NSComparisonResult)compare:(NSString *)str1 string:(NSString *)str2{    NSString *ch1 = [str1 getFirstLetter];   //调用开源库获取首字母    NSString *ch2 = [str2 getFirstLetter];  //调用开源库获取首字母    NSComparisonResult result = [ch1 localizedCompare:ch2];    if (result == NSOrderedSame)  //如果第一个字母是一样的,则进入递归    {        if (str1.length == 1)        {            return NSOrderedAscending;        }        else if (str2.length == 1)        {            return NSOrderedDescending;        }        else        {            NSString *str3 = [str1 substringFromIndex:1];            NSString *str4 = [str2 substringFromIndex:1];            return [self compare:str3 string:str4];        }    }    else    {        return result;    }}

//测试代码如下

```NSArray *array = [NSArray arrayWithObjects:@"&张三",@"&李四",@"圣诞节",@"圣诞没",@"圣诞啊",@"abc",@"acb",@"abad",@"abccdf",@"测试1",@"测试11",@"测2",@"测试33", nil];    __weak typeof(self) weakSelf = self;    for(NSString *string in array)    {        NSLog(@"before :%@",string);    }    NSLog(@"-------------");    NSArray *newArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        return [weakSelf compare:obj1 string:obj2];    }];    for (NSString *string in newArray)    {        NSLog(@"after :%@",string);    }    NSLog(@"-------------");    //测试 localizedCompare 方法是否管用    NSArray *array1 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        NSString *str1 = obj1;        NSString *str2 = obj2;        return [str1 localizedCompare:str2];    }];    for (NSString *string in array1)    {        NSLog(@" new ---- %@",string);    }

结果如下:
test[2404:103272] before :&张三
test[2404:103272] before :&李四
test[2404:103272] before :圣诞节
test[2404:103272] before :圣诞没
test[2404:103272] before :圣诞啊
test[2404:103272] before :abc
test[2404:103272] before :acb
test[2404:103272] before :abad
test[2404:103272] before :abccdf
test[2404:103272] before :测试1
test[2404:103272] before :测试11
test[2404:103272] before :测2
test[2404:103272] before :测试33
test[2404:103272] ————-
test[2404:103272] after :&李四
test[2404:103272] after :&张三
test[2404:103272] after :abad
test[2404:103272] after :abc
test[2404:103272] after :abccdf
test[2404:103272] after :acb
test[2404:103272] after :测2
test[2404:103272] after :测试1
test[2404:103272] after :测试11
test[2404:103272] after :测试33
test[2404:103272] after :圣诞啊
test[2404:103272] after :圣诞节
test[2404:103272] after :圣诞没
test[2404:103272] ————-
test[2404:103272] new —- &张三
test[2404:103272] new —- &李四
test[2404:103272] new —- abad
test[2404:103272] new —- abc
test[2404:103272] new —- abccdf
test[2404:103272] new —- acb
test[2404:103272] new —- 圣诞啊
test[2404:103272] new —- 圣诞没
test[2404:103272] new —- 圣诞节
test[2404:103272] new —- 测2
test[2404:103272] new —- 测试1
test[2404:103272] new —- 测试11
test[2404:103272] new —- 测试33

0 0
原创粉丝点击