-1

我使用两个滑块的值作为第一个搜索条件。


现在我想要第二个标准。我有一个

NSMutableArray *suitsArray;

最多包含 10 个单词,或者它可能是空的(0 个单词)。数组示例:

2012-08-12 03:13:14.825 App[4595:f803] The content of array is(
mushroom,
grill,
pizza
)

我想要的是这样的:

如果 suitsArray 像上面那样,包含词组蘑菇烧烤比萨饼

而字典中的“Suits”值是:“这款酒适合蘑菇菜、烧烤食品、比萨饼和鸡肉。”

该字典被添加到 searchResultsArray 中,与“Suits”值包含单词蘑菇烧烤披萨的所有其他字典相同。

但如果 suitsArray 没有对象,请跳过此标准。

但我不确定如何为它编写代码。你能帮我吗?


-(IBAction)searchButtonPressed:(id)sender{  

    resultObjectsArray = [NSMutableArray array];
    for(NSDictionary *object in allObjectsArray)

    {

    NSString *objectPrice = [object objectForKey:@"75 cl price"];

    NSString *suitsString = // the words in suitsArray
    NSString *objectSuits = [object objectForKey:@"Suits"];


    BOOL priceConditionGood = YES;
    if (minPrisSlider.value <= maxPrisSlider.value && (winePrice.floatValue < minPrisSlider.value || winePrice.floatValue > maxPrisSlider.value))
        priceConditionGood = NO;
    if (priceConditionGood)
        [resultObjectsArray addObject:object];
     }


    ResultsTableViewController *nextController = [[self storyboard] instantiateViewControllerWithIdentifier:@"ResultsController"];
    nextController.objectsArray = [[NSMutableArray alloc]initWithArray:resultObjectsArray];
    [self.navigationController pushViewController:nextController animated:YES];
}
4

1 回答 1

1

最好查看 suitsArray 是否包含字符串 objectSuits,而不是使用 rangeOfString。

if ([suitsArray containsObject:objectSuits]);
    [resultObjectsArray addObject:object];

编辑后:我想我现在明白了。此方法查看 suitsArray 中的每个单词,如果在 objectSuits 中找到任何单词,则将 object 添加到 resultObjectArray。

    for (NSString *aWord in suitsArray) {
        if ([objectSuits rangeOfString:aWord].length == aWord.length) {
            [resultObjectArray addObject:objectSuits];
            break;
        }
    }

第二次编辑:经过进一步思考,上面的代码在逻辑上存在一个可能重要也可能不重要的缺陷——因为它使用 rangeOfString ,它会在其他单词中找到单词。因此,如果 objectSuits 是“This wine goes well with cheesecake”并且 suitsArray 包含单词 cheese,它会找到匹配项(我无法想象适合搭配奶酪的酒会适合搭配芝士蛋糕)。所以,我认为这是一个更好的解决方案,它将 objectSuit 分解为单个单词并将它们放入一个集合中。suitsArray 也被转换为一个集合,这样我们就可以使用 intersectsSet: 来查找是否有任何常用词。

NSCharacterSet *sepSet = [NSCharacterSet characterSetWithCharactersInString:@" ,.;"];
    NSArray *words = [objectSuits componentsSeparatedByCharactersInSet:sepSet];
    NSSet *objectSuitsWords = [NSSet setWithArray:words];
    NSSet *suitsSet = [NSSet setWithArray:suitsArray];
    BOOL ans = [suitsSet intersectsSet:objectSuitsWords];

因此,如果 ans 为 1,则该对象应添加到结果数组中。请注意,sepSet 以空格开头并包含逗号、句点和分号。您可能还想包含其他内容,但我认为这在大多数情况下应该有效。

于 2012-08-11T19:12:58.733 回答