Ios Objective-C中两个参数的比较
在Objective-C中,我想将plist与我正在使用的API的结果进行比较。我使用的API返回配方的成分。我将这些结果放入一个表视图中,向用户显示配方名称和配方成分。当用户选择他们选择的任何配方时,我希望出现一个UIAlert,告诉用户天气,他们是否有该特定配方的所有成分。API中的成分将与Plist进行比较。希望这是足够清楚的,如果不只是问,我会尝试解释得更清楚 如果我理解得很清楚,用户冰箱里的成分是从plist文件中提取的 阅读plist并将其存储在NSDictionary中非常容易。然后您可以与程序返回的成分进行比较 如果plist是由您的程序生成的,那么您可以比较程序中对您有意义的任何内容:例如对象“成分”的索引。 如果不是,那么你的比较可能很弱,这取决于你选择比较什么Ios Objective-C中两个参数的比较,ios,objective-c,cocoa-touch,Ios,Objective C,Cocoa Touch,在Objective-C中,我想将plist与我正在使用的API的结果进行比较。我使用的API返回配方的成分。我将这些结果放入一个表视图中,向用户显示配方名称和配方成分。当用户选择他们选择的任何配方时,我希望出现一个UIAlert,告诉用户天气,他们是否有该特定配方的所有成分。API中的成分将与Plist进行比较。希望这是足够清楚的,如果不只是问,我会尝试解释得更清楚 如果我理解得很清楚,用户冰箱里的成分是从plist文件中提取的 阅读plist并将其存储在NSDictionary中非常容易。然
对于配方中的每种成分,您可以检查属于用户的相同成分的数量 你想知道所有需要的材料是否都在橱柜里。您只需要一个是或否的结果。因此,您可以从数据中进行两次安排—RequiredElements和FoodCubboard
- (BOOL) weHaveIngredients:(NSArray*)requiredIngredients inCupboard:(NSArray*)foodCupboard
{
BOOL result = YES;
For (id ingredient in requiredIngredients) {
if !(foodCupboard containsObject:ingredient) {
result = NO;
break;
}
}
return result;
}
最好使用NSSET(唯一对象的集合)。您可以轻松地从NSArray创建NSSet:
NSSet* set = [NSSet setWithArray:(NSArray*)array];
然后你可以做:
- (BOOL) weHaveIngredients:(NSSet*)requiredIngredients inCupboard:(NSSet*)foodCupboard
{
BOOL result = YES;
if (!requiredIngredients isSubsetOfSet:foodCupboard)
result = NO;
return result;
}
你可以像这样使用它
NSString* alertmessage = "Sorry we can't make a cake, not enough ingredients"
if ([self weHaveIngredients:recipeIngredients inCupboard:foodCupboard])
alertmessage = "Start baking"
UIAlertView *alert =
[[UIAlertView alloc] initWithTitle: @"Ingredients checked"
message: alertMessage
delegate: self
cancelButtonTitle: @"OK"
otherButtonTitles: nil];
[alert show];
另一个问题是将数据转换为两个数组的形式。在将数组放入tableView时,您必须已经从API中获取了一个数组。我同样假设您知道如何从(存储的?)plist获取数组,因为您一定是以某种方式创建了plist。如果您有具体的数据转换问题,我建议您提出更具体的问题
所有这些都不能解决您是否有足够的每种成分的问题—要正确地做到这一点,您需要某种数据库。在Xcode中这样做会有困难。也许可以在Objective-C中使用。顺便问一下,你有什么问题吗?