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);