考虑一个名为NSObject
的简单Object
子类,它有两个属性:name
和group
。
我需要从NSArray
生成Objects
,NSArray
NSArrays
,每个子数组包含按name
排序的对象,并且都具有相同的group
值。group
输出数组必须按@[
@{ @"name" : @"E", @"group" : @"Y" },
@{ @"name" : @"D", @"group" : @"Z" },
@{ @"name" : @"B", @"group" : @"Y" },
@{ @"name" : @"C", @"group" : @"X" },
@{ @"name" : @"D", @"group" : @"Z" },
@{ @"name" : @"A", @"group" : @"X" },
@{ @"name" : @"F", @"group" : @"X" },
@{ @"name" : @"G", @"group" : @"Y" },
}]
排序。
有哪些简洁有效的方法可以做到这一点?
示例:
输入:
@[
@[
@{ @"name" : @"A", @"group" : @"X" },
@{ @"name" : @"C", @"group" : @"X" },
@{ @"name" : @"F", @"group" : @"X" },
],
@[
@{ @"name" : @"B", @"group" : @"Y" },
@{ @"name" : @"E", @"group" : @"Y" },
@{ @"name" : @"G", @"group" : @"Y" },
],
@[
@{ @"name" : @"D", @"group" : @"Z" },
],
]
输出:
{{1}}
答案 0 :(得分:0)
如果数组字典可以工作......
NSMutableDictionary *groupedDictionary = [NSMutableDictionary dictionary];
for (Object *anObject in originalArray) {
NSMutableArray *groupArray = [groupedDictionary objectForKey:anObject.group];
if(groupArray) {
[groupArray addObject:anObject];
} else {
groupArray = [NSMutableArray arrayWithObject:anObject];
[groupedDictionary addObject:groupArray forKey:anObject.group];
}
}
结果是数组字典。关键是组,值是该组中对象的数组。
如果您仍然需要它作为数组,那么您实际上可以通过执行以下操作将此字典转换为数组:
NSArray *groupedArrays = [groupedDictionary allValues];