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

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

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

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] 这个是首字母大写

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


你可能感兴趣的:(一个简单的城市名排序方法(按首字母的拼音排序))