简体   繁体   English

如何在NSMutableArray中对对象进行分组并在Objective-C中划分为单独的NSMutableArray

[英]How to group object in NSMutableArray and divide to separate NSMutableArray in Objective-C

I have NSMutableArray like this: 我有这样的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"}.

How can I breakdown and group it into separated NSMutableArray follow "date time". 我如何按照“日期时间”细分并将其分组到单独的NSMutableArray中。 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"}

You can achieve it using the below code: 您可以使用以下代码来实现:

 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({ $0["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) } 

The final desiredSeparatedArray is the answer!! 最终的desiredSeparatedArray是答案!!

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. 根据要求添加带有字典数组作为原始数据的Objective-C版本。

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"]; 您可以根据任何键进行隔离,只需将该键放在此处[dic valueForKey:@"datetime"]; . Instead of datetime , you may put Device as asked in comment. 您可以按要求输入Device而不是datetime

Screen shot of debugger after segregation : 隔离后调试器的屏幕截图:

在此处输入图片说明

try this 尝试这个

let array = Data as! [[String:String]]

let dictionary = Dictionary(grouping: array, by: {$0["datetime"]!})
var listOfArray = [[[String:String]]]()
dictionary.forEach({listOfArray.append($0.value)})

listOfArray will have all your arrays listOfArray将拥有所有数组

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将NSMutableArray添加到NSMutableArray Objective-c - How to add an NSMutableArray to an NSMutableArray Objective-c iOS / Objective-C:将NSString对象添加到NSMutableArray,NSMutableArray为(空) - iOS/Objective-C: Adding NSString object to NSMutableArray, NSMutableArray is (null) Objective-C:如何获取NSMutableArray内部对象的属性? - Objective-C: How to get properties of an object inside NSMutableArray? 如何将NSMutableArray存储到Objective-C中的另一个NSMutableArray - How to store an NSMutableArray to another NSMutableArray in Objective-C objective-C 中的 NSMutableArray 插入 - NSMutableArray insertion in objective-C 将对象添加到NSMutableArray时,Objective-c程序崩溃 - Objective-c program crashes when adding object to NSMutableArray 已声明的Object上的Objective-C NSMutableArray分配初始化 - Objective-C NSMutableArray alloc init on already declared Object Objective-C IOS Xcode:无法修改NSMutableArray中的对象 - Objective-C IOS Xcode: Unable to modify object in NSMutableArray 如何将我的客户NSMutableArray存储在Objective-C的NSUserDefaults中? - How to store my customer NSMutableArray in NSUserDefaults for Objective-C? 如何使用Objective-C使用两个NSMutableArray填充Expandable TableView - How to populate, Expandable TableView with two NSMutableArray using objective-c
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM