这个问题类似于从对象数组中提取属性,但是需要更深层次的提取。
为了简单起见,在下面的示例中,我所指的对象是NSStrings。
我有两个要解决的情况。
带有对象的NSArray的NSArray of NSDictionary
最好使用键值编码,从以下结构中,我想将所有的“title”提取到一个可枚举列表中:
NSArray *list1 = @[
@[
@{@"title":@"A", @"description":...},
@{@"title":@"B", @"description":...},
],
@[
@{@"title":@"C", @"description":...},
@{@"title":@"D", @"description":...},
],
];
期望的结果是,例如:
@[@"A", @"B", @"C", @"D"]
NSArray包含NSDictionary和NSArray中的对象
最好使用键值编码,从以下结构中,我想提取"titles"列表并将其合并为一个可枚举的列表:
NSArray *list2 = @[
@{
@"titles":@[
@"A",
@"B",
],
@"descriptions":...,
},
@{
@"titles":@[
@"C",
@"D",
],
@"descriptions":...,
},
];
期望的结果可以举例说明:
@[@"A", @"B", @"C", @"D"]
注意事项
我的实际情况涉及到第一个列表中的
NSOrderedSet
对象的NSOrderedSet
,以及第二个列表中带有NSOrderedSet
对象的NSDictionary
的NSOrderedSet
,但我认为这不会影响答案。我写过我更喜欢使用键值编码,但这不是必须的。如果可能的话,我只想避免编写
for (... in ...)
或enumateObjectWithBlock:
。再次强调,这并不重要,但对象是来自获取请求的
NSManagedObject
。所以我知道我可以直接优化获取请求,但我仍然想知道是否有好的替代方案。
@distinctUnionOfArrays
。 无论是NSArray
还是NSSet
,都可以使用其中任何一个。 - jscs@array
本身就可以成为一个很好的SO问题... - jscs