我有NSSet
(例如“水果”),由NSManagedObjects
组成,并使用以下过滤代码创建:
NSSet *fruits = [self.allFruits filteredSetUsingPredicate:
[NSPredicate predicateWithFormat:@"quantity > 10"];
每个水果都有以下属性(属性):name
(例如:苹果,橙色,香蕉),color
(红色,黄色,绿色)和quantity
(100 ,20,10)。
从这个NSDictionary
创建NSSet
的最有效方法是什么,其中包含name
个水果作为密钥,quantities
作为密钥对象(例如key:object:apple:100 orange:20)?
这是使用块枚举的方法:
__block NSMutableDictionary *fruitsAndColors = [NSMutableDictionary dictionary];
[fruits enumerateObjectsUsingBlock:^(id fruit, BOOL *stop) {
[fruitsAndColors setObject:fruit.color forKey:fruit.name];
}];
有没有更优雅的方法来实现同样的目标?
谢谢!
答案 0 :(得分:3)
这是快捷方式。
NSMutableArray *array = [NSMutableArray arrayWithCapacity:ManagedObjectItems.count];
[[ManagedObjectItems allObjects] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
Diary_item_food *food = obj;
NSArray *keys = [[[food entity] attributesByName] allKeys];
NSDictionary *dict = [obj dictionaryWithValuesForKeys:keys];
[array addObject:dict];
}];
答案 1 :(得分:2)
您是否尝试过使用自定义NSManagedObject子类的方法,该方法将每个对象写入具有所需键和值的字典。
然后你可以枚举你的NSSet并在每个对象上调用这个方法来创建一个字典集合。
我只是给你一个大致的想法,因为你问了一个普遍的问题。如果您尝试编写代码,您可以回过头来解决任何其他问题。