如何在 NSMutableArray 中对对象进行分组并在 Objective-C 中划分为单独的 NSMutableArray
How to group object in NSMutableArray and divide to separate NSMutableArray in Objective-C
我有这样的 NSMutableArray:
// 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"}.
如何将其分解并分组到单独的 NSMutableArray 中,遵循 "date time"。如上案例将分为:
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"}
和
Data_d2 = {"Device": "A1", "Temperature": "25", "datetime": "2013.02.04"},
{"Device": "A2", "Temperature": "25", "datetime": "2013.02.04"}
您可以使用以下代码实现它:
let data:[[String: String]] = [
["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"]]
let dateTimeArray = data.compactMap({ [=10=]["datetime"] })
let uniqueDateTimeArray = Array(Set(dateTimeArray))
var desiredSeparatedArray = [[[String: String]]]()
for dateTime in uniqueDateTimeArray {
var arrayForDateTime = [[String: String]]()
for element in data {
if element["datetime"] == dateTime {
arrayForItem.append(element)
}
}
desiredSeparatedArray.append(arrayForDateTime)
}
最后的desiredSeparatedArray
就是答案!!
如果你有这样的字典数组:
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"]]
然后你可以根据任意键将它们分开,如下所示:
var dateArray = data.compactMap{ [=11=]["datetime"] }
let uDateArray = Array(Set(dateArray))
var segregatedArray = [[[String: String]]]()
for dateTime in uDateArray {
segregatedArray.append(data.filter{[=11=]["datetime"] == dateTime})
}
print(segregatedArray);
Adding as per request Objective-C version with Array of dictionary as raw data.
假设您有如下字典数组:
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"}];
那么你可以按如下方式将它们分开:
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);
您可以根据任何键进行隔离,只需将该键放在这里 [dic valueForKey:@"datetime"];
。您可以按照评论中的要求输入 Device
,而不是 datetime
。
隔离后调试器的屏幕截图:
试试这个
let array = Data as! [[String:String]]
let dictionary = Dictionary(grouping: array, by: {[=10=]["datetime"]!})
var listOfArray = [[[String:String]]]()
dictionary.forEach({listOfArray.append([=10=].value)})
listOfArray 将包含您的所有数组
我有这样的 NSMutableArray:
// 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"}.
如何将其分解并分组到单独的 NSMutableArray 中,遵循 "date time"。如上案例将分为:
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"}
和
Data_d2 = {"Device": "A1", "Temperature": "25", "datetime": "2013.02.04"},
{"Device": "A2", "Temperature": "25", "datetime": "2013.02.04"}
您可以使用以下代码实现它:
let data:[[String: String]] = [ ["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"]] let dateTimeArray = data.compactMap({ [=10=]["datetime"] }) let uniqueDateTimeArray = Array(Set(dateTimeArray)) var desiredSeparatedArray = [[[String: String]]]() for dateTime in uniqueDateTimeArray { var arrayForDateTime = [[String: String]]() for element in data { if element["datetime"] == dateTime { arrayForItem.append(element) } } desiredSeparatedArray.append(arrayForDateTime) }
最后的desiredSeparatedArray
就是答案!!
如果你有这样的字典数组:
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"]]
然后你可以根据任意键将它们分开,如下所示:
var dateArray = data.compactMap{ [=11=]["datetime"] }
let uDateArray = Array(Set(dateArray))
var segregatedArray = [[[String: String]]]()
for dateTime in uDateArray {
segregatedArray.append(data.filter{[=11=]["datetime"] == dateTime})
}
print(segregatedArray);
Adding as per request Objective-C version with Array of dictionary as raw data.
假设您有如下字典数组:
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"}];
那么你可以按如下方式将它们分开:
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);
您可以根据任何键进行隔离,只需将该键放在这里 [dic valueForKey:@"datetime"];
。您可以按照评论中的要求输入 Device
,而不是 datetime
。
隔离后调试器的屏幕截图:
试试这个
let array = Data as! [[String:String]]
let dictionary = Dictionary(grouping: array, by: {[=10=]["datetime"]!})
var listOfArray = [[[String:String]]]()
dictionary.forEach({listOfArray.append([=10=].value)})
listOfArray 将包含您的所有数组