Objective c 在目标C中过滤、分组和划分2D NSArray

Objective c 在目标C中过滤、分组和划分2D NSArray,objective-c,nsmutablearray,nsdictionary,Objective C,Nsmutablearray,Nsdictionary,我有一个2D NSArray,我想根据筛选对象键进行筛选、分组和分割,以分离2D NSArray。那我怎么做呢 NSMutableArray *totalRatings = [NSMutableArray arrayWithObjects: [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-04 16:09:22", @"measure_time"

我有一个2D NSArray,我想根据筛选对象键进行筛选、分组和分割,以分离2D NSArray。那我怎么做呢

    NSMutableArray *totalRatings = [NSMutableArray arrayWithObjects:
                         [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-04 16:09:22", @"measure_time", @"25.6", @"Temp", nil],
                         [NSDictionary dictionaryWithObjectsAndKeys:@"A2", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"23.4", @"Temp", nil],
                         [NSDictionary dictionaryWithObjectsAndKeys:@"A3", @"Device", @"2018-07-04 16:09:22", @"measure_time", @"23.6", @"Temp", nil],
                         [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"26.3", @"Temp", nil],
                         [NSDictionary dictionaryWithObjectsAndKeys:@"A2", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"25.8", @"Temp", nil],
                                .........
                         [NSDictionary dictionaryWithObjectsAndKeys:@"Device_n", @"Device", @"date_time_n", @"measure_time", @"25.8", @"Temp", nil],
                         nil];
案例1:过滤,按“测量时间”键排序。输出:

NSMutableArray separated_date_time_1 =[NSMutableArray arrayWithObjects:
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-04 16:09:22", @"measure_time", @"25.6", @"Temp",nil
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A3", @"Device", @"2018-07-04 16:09:22", @"measure_time", @"23.6", @"Temp", nil],
                                        nil],

NSMutableArray separated_date_time_2 =[NSMutableArray arrayWithObjects:
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A2", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"23.4", @"Temp", nil],
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"26.3", @"Temp", nil],
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A2", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"25.8", @"Temp", nil],
                                       nil],


NSMutableArray separated_date_time_n =[NSMutableArray arrayWithObjects:
                                     [NSDictionary dictionaryWithObjectsAndKeys:@"Device_n", @"Device", @"date_time_n", @"measure_time", @"25.8", @"Temp", nil],
                                      nil],
案例2:按设备过滤,输出:

NSMutableArray separated_Device_A1 =[NSMutableArray arrayWithObjects:
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-04 16:09:22", @"measure_time", @"25.6", @"Temp",nil
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A1", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"26.3", @"Temp", nil],
                                        nil],

  NSMutableArray separated_Device_A2 =[NSMutableArray arrayWithObjects:
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A2", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"23.4", @"Temp", nil],
                                    [NSDictionary dictionaryWithObjectsAndKeys:@"A2", @"Device", @"2018-07-05 16:09:22", @"measure_time", @"25.8", @"Temp", nil],
                                       nil],


   NSMutableArray separated_Device_A_n =[NSMutableArray arrayWithObjects:
                                     [NSDictionary dictionaryWithObjectsAndKeys:@"Device_n", @"Device", @"date_time_n", @"measure_time", @"25.8", @"Temp", nil],
                                      nil],

不确定这是否是您想要的,但我将创建一个助手方法,该方法将根据给定的键对所有数据进行分组-我假设键的类型为
NSString
,如果不是,您将不得不对此进行一些修改:

- (NSDictionary *)groupByKey:(NSString *)key data:(NSArray *)data {
NSMutableDictionary *groupedDictionary = [NSMutableDictionary new];

    [data enumerateObjectsUsingBlock:^(NSDictionary *dataDict, NSUInteger idx, BOOL * _Nonnull stop) {
    NSString *keyValue = dataDict[key];

        if (keyValue != nil) {
            NSMutableArray *objectsWithKey = groupedDictionary[keyValue];

            if (objectsWithKey == nil) {
                objectsWithKey = [NSMutableArray new];
            }

            [objectsWithKey addObject:dataDict];
            groupedDictionary[keyValue] = objectsWithKey;
        }
    }];

    return [groupedDictionary copy];
}
然后,您可以这样使用:

NSDictionary *groupedByDevice = [self groupByKey:@"Device" data:totalRatings];
这会将所有唯一的设备名称作为键返回给您,值将是具有该设备名称的对象数组:

{
A1 =     (
            {
        Device = A1;
        Temp = "25.6";
        "measure_time" = "2018-07-04 16:09:22";
    },
            {
        Device = A1;
        Temp = "26.3";
        "measure_time" = "2018-07-05 16:09:22";
    }
);
A2 =     (
            {
        Device = A2;
        Temp = "23.4";
        "measure_time" = "2018-07-05 16:09:22";
    },
            {
        Device = A2;
        Temp = "25.8";
        "measure_time" = "2018-07-05 16:09:22";
    }
);
A3 =     (
            {
        Device = A3;
        Temp = "23.6";
        "measure_time" = "2018-07-04 16:09:22";
    }
);
}
与上面相同,只是
测量时间
用于分组:

NSDictionary *groupedByMeasure = [self groupByKey:@"measure_time" data:totalRatings];
结果是:

{
"2018-07-04 16:09:22" =     (
            {
        Device = A1;
        Temp = "25.6";
        "measure_time" = "2018-07-04 16:09:22";
    },
            {
        Device = A3;
        Temp = "23.6";
        "measure_time" = "2018-07-04 16:09:22";
    }
);
"2018-07-05 16:09:22" =     (
            {
        Device = A2;
        Temp = "23.4";
        "measure_time" = "2018-07-05 16:09:22";
    },
            {
        Device = A1;
        Temp = "26.3";
        "measure_time" = "2018-07-05 16:09:22";
    },
            {
        Device = A2;
        Temp = "25.8";
        "measure_time" = "2018-07-05 16:09:22";
    }
);
}