I have NSMutableArray like this:
// NSMutableArray *Data = (NSMUtableArray(NSDictionary))
Data = {"Device": "A1", "Temperature": "25", "datetime": "2013.02.03"},
{"Device": "A2", "Temperature": "25", "datetime": "2013.02.03"},
{"Device": "A3", "Temperature": "25", "datetime": "2013.02.03"},
{"Device": "A1", "Temperature": "25", "datetime": "2013.02.04"},
{"Device": "A2", "Temperature": "25", "datetime": "2013.02.04"}.
How can I breakdown and group it into separated NSMutableArray follow "date time". As above case will be divide to:
Data_d1 = {"Device": "A1", "Temperature": "25", "datetime": "2013.02.03"},
{"Device": "A2", "Temperature": "25", "datetime": "2013.02.03"},
{"Device": "A3", "Temperature": "25", "datetime": "2013.02.03"}
And
Data_d2 = {"Device": "A1", "Temperature": "25", "datetime": "2013.02.04"},
{"Device": "A2", "Temperature": "25", "datetime": "2013.02.04"}
if you have array of array of dictionary like this :
var data = [["Device": "A1", "Temperature": "25", "datetime": "2013.02.02"],
["Device": "A2", "Temperature": "25", "datetime": "2013.02.03"],
["Device": "A3", "Temperature": "25", "datetime": "2013.02.03"],
["Device": "A1", "Temperature": "25", "datetime": "2013.02.04"],
["Device": "A2", "Temperature": "25", "datetime": "2013.02.04"]]
Then you can segregate them on basis of any key as follows:
var dateArray = data.compactMap{ $0["datetime"] }
let uDateArray = Array(Set(dateArray))
var segregatedArray = [[[String: String]]]()
for dateTime in uDateArray {
segregatedArray.append(data.filter{$0["datetime"] == dateTime})
}
print(segregatedArray);
Adding as per request Objective-C version with Array of dictionary as raw data.
Consider you have array of dictionary like following:
NSArray *array=@[
@{@"Device": @"A1",@"Temperature":@"25",@"datetime":@"2013.02.03"},
@{@"Device":@"A2",@"Temperature":@"25",@"datetime":@"2013.02.03"},
@{@"Device":@"A3",@"Temperature":@"25",@"datetime":@"2013.02.03"},
@{@"Device":@"A1",@"Temperature":@"25",@"datetime":@"2013.02.04"},
@{@"Device":@"X1",@"Temperature":@"26",@"datetime":@"2013.02.07"},
@{@"Device":@"Y1",@"Temperature":@"27",@"datetime":@"2013.02.07"},
@{@"Device":@"A2",@"Temperature":@"25",@"datetime":@"2013.02.04"}];
Then you can segregate them as follows:
NSMutableDictionary* mutableDic = [[NSMutableDictionary alloc] initWithCapacity:1];
for (NSDictionary* dic in array) {
NSString* dateTime = [dic valueForKey:@"datetime"];
NSMutableArray* data = [mutableDic valueForKey:dateTime];
if(data != nil)//data with this key avalaibe, add further.
{
[data addObject:dic];
}
else//data with this key not avalaibe, make a mutable array with this dic and add.
{
NSMutableArray* newData = [[NSMutableArray alloc] initWithObjects:dic, nil];
[mutableDic setValue:newData forKey:dateTime];
}
}
NSLog(@"%@", mutableDic);
you can segregate on basis of any key just put that key here [dic valueForKey:@"datetime"];
. Instead of datetime
, you may put Device
as asked in comment.
Screen shot of debugger after segregation :