Objective c 在目标C中过滤、分组和划分2D NSArray
我有一个2D NSArray,我想根据筛选对象键进行筛选、分组和分割,以分离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"
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";
}
);
}