NSArray 分组归类

NSArray 分组归类

使用场景:

根据NSArray中NSDictionary的一个键值,将NSArray重新分组,例如:后台返回一个json数据

(
        {
        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;
        }
    )
)
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值