這個是項目中遇到了這樣一個需求:
要求把后臺返回的數據即一大堆城市模型 按城市名的首字母排序:
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] 這個是首字母大寫
歡迎大神指正~~~~~~~~~~