前言
這篇文章,我實在不知道如何去起名字了,如果你看到了這篇文章,希望我所說的東西對你有過幫助.
事情是這樣的,iOS開發(fā)肯定都會接觸UITableView,我們根據(jù)服務(wù)器返回的不同數(shù)據(jù),進(jìn)行相應(yīng)的展示,一般來說,有分組的,服務(wù)器往往返回一個二維數(shù)組,第一層數(shù)組元素的個數(shù)決定了section的個數(shù),里層數(shù)組決定了相應(yīng)section中row的行數(shù),這是開發(fā)中沒有什么處理難度的事,但是,就因為這個但是,讓我在開發(fā)中頭疼了一天,就像上面說的,我要做一個分組數(shù)不確定每組行數(shù)不確定的一個tableView,但是服務(wù)器返回的是一個摻雜了所有數(shù)據(jù)的一維數(shù)組,這個數(shù)組里都對應(yīng)了若干個大字典,我的分組依據(jù)就是每個字典中的一個key對應(yīng)的value
我相信你蒙了
來看看下面這段我模擬的假數(shù)據(jù)
listData:[
{"name":"iOScoderZZJ","age":18,"class":"一班"},
{"name":"xiaohong","age":20,"class":"二班"},
{"name":"xiaoli","age":25,"class":"三班"},
{"name":"xiaopeng","age":30,"class":"一班"}
......
]
我們的需求是這樣的, listdata數(shù)組中有多少個元素我們是不確定的,class的種類數(shù)是不確定的(一班,二班....十五班...),如上面那段數(shù)據(jù),我們分組的依據(jù)就是class,我們要把相同class的數(shù)據(jù)分解到多個數(shù)組中,方便tableview去展示
現(xiàn)在的已知:一個大數(shù)組
現(xiàn)在的未知:數(shù)組元素個數(shù),分類標(biāo)識的種類數(shù)
現(xiàn)在的需求:拆解成tableview可用的二維數(shù)組,class種類數(shù)決定了section個數(shù).每類class的個數(shù)決定了相應(yīng)section的row數(shù)
解決方法
我們利用字典和數(shù)組的相關(guān)知識,把數(shù)組拆分成以class為key,class相同的數(shù)組為value的若干字典,拿到這個字典可以利用字典的allKeys allValues
兩個屬性得到外層數(shù)組的元素個數(shù),并進(jìn)行響應(yīng)的操作
核心代碼 ↓ ↓ ↓ ↓
NSMutableDictionary * dic = [NSMutableDictionary dictionary];
if(listData)
{
//遍歷
[listData enumerateObjectsUsingBlock:^(NSDictionary* obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSMutableArray *array = dic[obj[@"class"]];
if(!array)
//如果數(shù)組不存在創(chuàng)建
array = @[obj].mutableCopy;
else
//如果存在添加元素
[array addObject:obj];
//根據(jù)不同的key,創(chuàng)建對應(yīng)的字典
[dic setObject:array forKey:obj[@"class"]];
}];
self. classDic = dic;
}
實戰(zhàn)截圖
打印結(jié)果
總結(jié)
這樣我們就巧妙的拆解了這個不能直接拿來就用的一維數(shù)組,我們巧妙的運用了字典這種數(shù)據(jù)類型,如果大家有更好的方法,歡迎留言,今天的分享就到這里了,謝謝大家的閱讀
我是iOS開發(fā)的小菜雞,希望有一天能成為雄鷹
旅途很長,還需修行