美文网首页
一个简单的城市名排序方法(按首字母的拼音排序)

一个简单的城市名排序方法(按首字母的拼音排序)

作者: 0诛仙0 | 来源:发表于2016-07-25 16:59 被阅读237次

    这个是项目中遇到了这样一个需求:

    要求把后台返回的数据即一大堆城市模型 按城市名的首字母排序:

    NSSortDescriptor  * sd1 = [NSSortDescriptor sortDescriptorWithKey:@"pinyin" ascending:YES];


    这里的这个key  @"pinyin"  是模型的一个属性  在执行排序的算法中 只会调用该属性的get方法,不会调用set方法

    这里对pinyin的属性解释一些 这是自己定义的一个属性jsonModel使用Ignore

    把城市名通过

    NSMutableString *str = [self.cityName mutableCopy];

    CFStringTransform(( CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);

    CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);

     [str stringByReplacingOccurrencesOfString:@" " withString:@""];

    这个方法 即可转为拼音

    写getter方法的使用可以使用懒加载的方式 这样有力于节约系统性能


    NSArray * sdArray = [NSArray arrayWithObject:sd1];

    NSArray * serializeArray = [(NSArray *)_pmodel.cityList sortedArrayUsingDescriptors:sdArray];


    NSSortDescriptor 这个类很强大 可以详细了解一下


    char lastC = '1';

    NSMutableArray *data;

    NSMutableArray *oth = [[NSMutableArray alloc] init];

    for (LWCityMdoel * user in serializeArray) {

    char c = [user.pinyin characterAtIndex:0];

    if (!isalpha(c)) {

    [oth addObject:user];

    }else if (c != lastC){

    lastC = c;

    if (data && data.count > 0) {

    [self.modelArray addObject:data];

    }

    data = [[NSMutableArray alloc] init];

    [data addObject:user];

    }

    else {

    [data addObject:user];

    }

    }

    if (data && data.count > 0) {

    [self.modelArray addObject:data];

    }

    if (oth.count > 0) {

    [self.modelArray addObject:oth];

    }


    这里是把排序过的数组 再重新分一下组


    [_tableView reloadData];


    刷新数据

    这里有几个把小写字母转为大写的方法

    char c = 'a';

    [NSString stringWithFormat:@"%c", toupper(c)];

    或者 @“a”

    [@"a" capitalizedString] 这个是首字母大写

    欢迎大神指正~~~~~~~~~~


    相关文章

      网友评论

          本文标题:一个简单的城市名排序方法(按首字母的拼音排序)

          本文链接:https://www.haomeiwen.com/subject/zdogjttx.html