在我的tableview中,我有一个包含类别的数组,每个类别中都有多个产品(所有这些产品都是NSObjects):
category-1:
- product-1
- product-3
category-2:
- product-2
- ...
单击按钮时,会选择随机产品。我需要在数组中找到具有类别和产品的匹配产品。没有太多循环,任何提示都会这样做吗?
这是数据结构的构建方式:
for(Category *category in self.categories){
NSMutableArray *categorydata = [[NSMutableArray alloc] init];
for(Product *product in self.products){
if(category.catid == product.catid) [categorydata addObject:product];
}
[[AppModel sharedInstance].serverDocuments addObject:categorydata];
}
类别和产品是带有catid和名称的自定义NSObject。
答案 0 :(得分:0)
首先,这段代码很愚蠢:
for(Category *category in self.categories){
NSMutableArray *categorydata = [[NSMutableArray alloc] init];
for(Product *product in self.products){
if(category.catid == product.catid) [categorydata addObject:product];
}
[[AppModel sharedInstance].serverDocuments addObject:categorydata];
}
如果只有一个产品category.catid == product.catid
,那么在您的if
子句中,您应该break
找到它之后:没有必要继续循环,因为搜索是有效的结束了。
第二,当然,您可以通过使用NSPredicate和/或键值编码等技术更紧凑地表达。但在引擎盖下,循环仍然会发生,所以没有真正获得的东西。问题是你没有把它结构化为一个字典,其中有一个键将直接带到正确的条目。如果您想要这种直接访问,则必须重新构建模型。
答案 1 :(得分:0)
目前,您的代码将遍历每个类别的每个产品。
一旦找到了您正在寻找的产品,就应该先使用break
。这将“打破”产品循环。
然后您还应该break
退出类别循环(请参阅https://stackoverflow.com/a/9419013/4633161)或 - 如果您需要循环播放后续类别continue
。