NSArray 分组归类
使用场景:
根据NSArray中NSDictionary的一个键值,将NSArray重新分组,例如:后台返回一个son数据
(
{
index = 4;
name = MyProduct1;
},
{
index = 10;
name = MyProduct2;
},
{
index = 18;
name = MyProduct3;
},
{
index = 4;
name = MyProduct8;
},
{
index = 18;
name = MyProduct6;
}
)
现在要将index相同的数据放在一类中
实现代码
// 测试array
NSArray *testArray = @[
@{
@"name": @"MyProduct1",
@"index": @4
},
@{
@"name": @"MyProduct2",
@"index": @10
},
@{
@"name": @"MyProduct3",
@"index": @18
},
@{
@"name": @"MyProduct8",
@"index": @4
},
@{
@"name": @"MyProduct6",
@"index": @18
}
];
// 获取array中所有index值
NSArray *indexArray = [testArray valueForKey:@"index"];
// 将array装换成NSSet类型
NSSet *indexSet = [NSSet setWithArray:indexArray];
// 新建array,用来存放分组后的array
NSMutableArray *resultArray = [NSMutableArray array];
// NSSet去重并遍历
[[indexSet allObjects] enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
// 根据NSPredicate获取array
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"index == %@",obj];
NSArray *indexArray = [testArray filteredArrayUsingPredicate:predicate];
// 将查询结果加入到resultArray中
[resultArray addObject:indexArray];
}];
最终结果
(
(
{
index = 18;
name = MyProduct3;
},
{
index = 18;
name = MyProduct6;
}
),
(
{
index = 10;
name = MyProduct2;
}
),
(
{
index = 4;
name = MyProduct1;
},
{
index = 4;
name = MyProduct8;
}
)
)