一個簡單的城市名排序方法(按首字母的拼音排序)

這個是項目中遇到了這樣一個需求:

要求把后臺返回的數據即一大堆城市模型 按城市名的首字母排序:

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] 這個是首字母大寫

歡迎大神指正~~~~~~~~~~


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容