基于NSDictionay中的密钥对NSDictionary的NSArray进行分组

Abh*_*nav 6 cocoa-touch objective-c nsdictionary nsarray ios

我试图过滤掉NSArray的NSArray.在我的下面的例子中,我希望dict1,dict2和dict4分组在一个数组中,dict3和dict5分组在第二个数组中,dict6在第三个数组中.

我在NSArray中获取这些数据,所以基本上下面的"orig"数组是我的输入,我知道我需要根据"Name"键进行分组.

我没有循环遍历NSArray,而是使用valueForKeyPath基于键路径返回数组,但这不起作用(与日志崩溃 - [NSMutableArray addObjectsFromArray:]:数组参数不是NSArray').

任何建议.

NSDictionary *dict1 = @{@"Name" : @"T1", @"Age" : @"25"};
NSDictionary *dict2 = @{@"Name" : @"T1", @"Age" : @"25"};
NSDictionary *dict3 = @{@"Name" : @"T2", @"Age" : @"27"};
NSDictionary *dict4 = @{@"Name" : @"T1", @"Age" : @"25"};
NSDictionary *dict5 = @{@"Name" : @"T2", @"Age" : @"27"};
NSDictionary *dict6 = @{@"Name" : @"T3", @"Age" : @"28"};

NSArray *orig = @[dict1, dict2, dict3, dict4, dict5, dict6];

NSMutableArray *final = [NSMutableArray array];

final = [orig valueForKeyPath:@"@unionOfArrays.Name"];

NSLog(@"Final = %@", final);
Run Code Online (Sandbox Code Playgroud)

Tom*_*ton 5

有点难以判断你想要的是三个不同的数组,其中每个数组只包含具有特定Name值的条目(如第一段建议的那样),或者如果你想要一个单独的数组,其中条目按顺序排序Name(如你的第二段建议的那样) ).而不管,

要按字段orig的值排序Name:

NSArray *sortedByName = [orig sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"Name" ascending:YES]]];
Run Code Online (Sandbox Code Playgroud)

要通过仅选择具有特定值的条目来获取新数组Name:

NSArray *t1Only = [orig filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"Name = %@", @"T1"]];
Run Code Online (Sandbox Code Playgroud)