NSArray數(shù)組分組歸類(lèi)

NSArray數(shù)組分組歸類(lèi)

[TOC]

數(shù)組基本用法

遍歷數(shù)組

// for循環(huán)
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil nil]; 
 int count = array.count; 
 for (int i = 0; i<count; i++) {  id obj = [array objectAtIndex:i];  } 

// for in 快速遍歷
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil nil];  
int i =0;  
for (id obj in array) {  NSLog(@"%i-%@", i, obj);  i++;  }  

// 代碼塊遍歷
NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];
[array enumerateObjectsUsingBlock:  ^(id obj, NSUInteger idx, BOOLBOOL *stop) {  NSLog(@"%i-%@", idx, obj);  
    // 如果索引為1辐董,就停止遍歷  
    if (idx == 1) { 
       // 利用指針修改外面BOOL變量的值 
       *stop = YES; 
    } 
}]; 

數(shù)組排序

// 第一種
NSArray *array = [NSArray arrayWithObjects:@"2", @"3", @"1", @"4", nil nil]; 
// 返回一個(gè)排好序的數(shù)組,原來(lái)數(shù)組的元素順序不會(huì)改變 
// 指定元素的比較方法:compare:
NSArray *array1 = [array sortedArrayUsingSelector:@selector(compare:)]; NSLog(@"array1:%@", array1);

// 第二種
NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];
NSArray *sortSetArray = [array sortedArrayUsingDescriptors:sortDesc];

// 第三種
NSArray *test = @[ 1.8T,2.0T,2.0T,3.0L,1.8T,1.8T,2.0T,3.0L,1.8T,2.0T,1.8T,1.8T, 2.0T,1.8T,2.0T,2.0T,3.2L,1.8T,1.8T,2.0T,2.0T,3.2L,2.0T,3.2L, ];
NSArray *array3 = [self getNewArray test];
// 返回一個(gè)排序好的數(shù)組
- (NSArray *)getNewArray:(NSArray *)array {
      NSArray *arrayM = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
      if (NSOrderedDescending == [obj1 compare:obj2 options:NSNumericSearch]) {  
          return (NSComparisonResult)NSOrderedDescending;  
      } 
      if (NSOrderedAscending==[obj1 compare:obj2 options:NSNumericSearch]) {  
          return (NSComparisonResult)NSOrderedAscending;  
      } 
      return (NSComparisonResult)NSOrderedSame; 
  }]; 
      return arrayM;
}

分組歸類(lèi)

使用場(chǎng)景 :根據(jù)NSAarry中NSDictionary的一個(gè)key值,將數(shù)組重新分組衷咽,下面是后臺(tái)返回的數(shù)據(jù):

(   
{brand_id = 1; brand_name = 奧迪; initial = A;},
{brand_id = 2; brand_name = 阿斯頓·馬丁; initial = A;}, 
{brand_id = 11; brand_name = 保時(shí)捷; initial = B;}, 
{brand_id = 7; brand_name = 寶馬; initial = B;}, 
{brand_id = 24; brand_name = 昌河; initial = C;},
{brand_id = 22; brand_name = 長(zhǎng)城; initial = C;}
)

代碼實(shí)現(xiàn)

NSArray *testArray = @[  
@{@"brand_id": @"1", @"brand_name": @"奧迪", @"initial": @"A"}, 
@{@"brand_id": @"2", @"brand_name": @"阿斯頓·馬丁", @"initial": @"A"}, 
@{@"brand_id": @"3", @"brand_name": @"保時(shí)捷", @"initial": @"B"}, 
@{@"brand_id": @"4", @"brand_name": @"寶馬", @"initial": @"B"}, 
@{@"brand_id": @"4", @"brand_name": @"昌河", @"initial": @"C"}, 
@{@"brand_id": @"5", @"brand_name": @"長(zhǎng)城", @"initial": @"C"} ];

// 獲取數(shù)組中所用的initial的value值,indexArray數(shù)組中是亂序排列的。
NSMutableArray *indexArray = [NSMutableArray array]; 
indexArray = [testArray valueForKeyPath:@"initial"];
// 將array裝換成NSSet類(lèi)型走净,重新排序生成新的數(shù)組
NSSet *indexSet = [NSSet setWithArray:indexArray];
NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]];
NSArray *sortSetArray = [indexSet sortedArrayUsingDescriptors:sortDesc];
// 遍歷數(shù)組并進(jìn)行歸類(lèi)
NSMutableArray *resultArray = [NSMutableArray array];
[sortSetArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    // 根據(jù)NSPredicate獲取array 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"initial == %@",obj]; NSArray *indexArray = [testArray filteredArrayUsingPredicate:predicate];  
    // 將查詢(xún)結(jié)果加入到resultArray中
    [resultArray addObject:indexArray]; 
}];

過(guò)濾重復(fù)元素和排序

// 最簡(jiǎn)潔银择,但返回的結(jié)果是無(wú)序的。
NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSSet *set = [NSSet setWithArray:arr]; 

// 去除相同元素并重新排序
NSArray *arr = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSSet *set = [NSSet setWithArray:arr]; 
NSArray *sortDesc = @[[[NSSortDescriptor alloc] initWithKey:nil ascending:YES]]; 
NSArray *sortSetArray = [set sortedArrayUsingDescriptors:sortDesc];

// 利用NSDictionary的AllKeys(AllValues)方法
NSArray *dataArray =@[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSMutableDictionary *dic = [[NSMutableDictionary alloc]initWithCapacity:0]; 
for(NSString *str in dataArray){  
    [dic setValue:str forKey:str]; 
} 
NSLog(@"%@",[dic allKeys]);

// 利用數(shù)組的containsObject來(lái)去除
NSArray *dataArray =@[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"]; 
NSMutableArray *listAry = [[NSMutableArray alloc]init];  
for (NSString *str in dataArray) {  
    if (![listAry containsObject:str]) { 
         [listAry addObject:str];  
    }  
} 
NSLog(@"%@",listAry); 





最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懦尝,一起剝皮案震驚了整個(gè)濱河市知纷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陵霉,老刑警劉巖琅轧,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異踊挠,居然都是意外死亡乍桂,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)效床,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)睹酌,“玉大人,你說(shuō)我怎么就攤上這事剩檀”镅兀” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵沪猴,是天一觀的道長(zhǎng)辐啄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)运嗜,這世上最難降的妖魔是什么壶辜? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮担租,結(jié)果婚禮上砸民,老公的妹妹穿的比我還像新娘。我一直安慰自己翩活,他們只是感情好阱洪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著菠镇,像睡著了一般冗荸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上利耍,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天蚌本,我揣著相機(jī)與錄音盔粹,去河邊找鬼。 笑死程癌,一個(gè)胖子當(dāng)著我的面吹牛舷嗡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嵌莉,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼进萄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了锐峭?” 一聲冷哼從身側(cè)響起中鼠,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沿癞,沒(méi)想到半個(gè)月后援雇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椎扬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年惫搏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚕涤。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筐赔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揖铜,到底是詐尸還是另有隱情川陆,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布蛮位,位于F島的核電站,受9級(jí)特大地震影響鳞绕,放射性物質(zhì)發(fā)生泄漏失仁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一们何、第九天 我趴在偏房一處隱蔽的房頂上張望萄焦。 院中可真熱鬧,春花似錦冤竹、人聲如沸拂封。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冒签。三九已至,卻和暖如春钟病,著一層夾襖步出監(jiān)牢的瞬間萧恕,已是汗流浹背刚梭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票唆,地道東北人朴读。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像走趋,于是被迫代替她去往敵國(guó)和親衅金。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 站在前輩的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的對(duì)象...
    zysmoon閱讀 8,694評(píng)論 0 16
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)簿煌、插件氮唯、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 1.badgeVaule氣泡提示 2.git終端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夾內(nèi)容...
    i得深刻方得S閱讀 4,667評(píng)論 1 9
  • 那天忘記寫(xiě)了,娃上大班后沒(méi)幾天啦吧,跟我說(shuō)大班和小班您觉、中班果然不一樣了:每天都吃雞蛋,還說(shuō)了其它的授滓,我忘記了琳水。說(shuō)明她在...
    圈_圈_閱讀 240評(píng)論 0 0
  • 【注意】本文包含《四重奏》第六集劇透。 由于《四重奏》的緣故般堆,坂元裕二在我心目中的編劇排行榜上超越了魔法特在孝,上升到...
    瑪雅藍(lán)閱讀 544評(píng)論 2 1