Iphone 设置对象的NSMutableArray以匹配字符串值

Iphone 设置对象的NSMutableArray以匹配字符串值,iphone,objective-c,ios,xcode,Iphone,Objective C,Ios,Xcode,我使用两个滑块的值作为第一个搜索条件 现在我想要第二个标准。我有一个 NSMutableArray *suitsArray; 它最多包含10个单词,也可以是空的(0个单词)。阵列示例: 2012-08-12 03:13:14.825 App[4595:f803] The content of array is( mushroom, grill, pizza ) 我想要的是: 如果suitsArray与上述类似,包含单词蘑菇、烧烤和比萨饼 字典中的“适合”值是:“这种酒适合蘑菇菜肴,烧烤食

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


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

NSMutableArray *suitsArray;
它最多包含10个单词,也可以是空的(0个单词)。阵列示例:

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

我想要的是:

如果suitsArray与上述类似,包含单词蘑菇烧烤比萨饼

字典中的“适合”值是:“这种酒适合蘑菇菜肴,烧烤食物,比萨饼和鸡肉。”

此词典被添加到searchResultsArray中,与所有其他词典一样,“Suits”值包含单词蘑菇烧烤比萨饼

但是如果SuiterRay没有对象,请跳过此准则

但是我不知道如何为它编写代码。你能帮我吗


-(iAction)搜索按钮按下:(id)发件人{
resultObjectsArray=[NSMutableArray];
for(allObjectsArray中的NSDictionary*对象)
{
NSString*objectPrice=[object objectForKey:@“75 cl价格”];
NSString*suitsString=//SuitsRay中的单词
NSString*ObjectSuites=[object objectForKey:@“Suites”];
BOOL-priceConditionGood=是;
if(minprislider.value maxPrisSlider.value))
价格条件良好=否;
如果(好的)
[结果对象ray addObject:object];
}
ResultsTableViewController*nextController=[[self-storyboard]实例化视图控制器的标识符:@“ResultsController”];
nextController.objectsArray=[[NSMutableArray alloc]initWithArray:resultObjectsArray];
[self.navigationController pushViewController:nextController动画:是];
}

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

if ([suitsArray containsObject:objectSuits]);
    [resultObjectsArray addObject:object];
编辑后:我想我现在明白了。此方法查看suitsArray中的每个单词,如果在objectSuits中找到其中任何一个单词,则对象将添加到resultObjectArray中

    for (NSString *aWord in suitsArray) {
        if ([objectSuits rangeOfString:aWord].length == aWord.length) {
            [resultObjectArray addObject:objectSuits];
            break;
        }
    }
第二次编辑:经过进一步思考,上面的代码在逻辑上有一个缺陷,这个缺陷可能很重要,也可能不重要——因为它使用rangeOfString,它会在其他单词中找到单词。因此,如果objectSuits是“这款酒配芝士蛋糕很好”,suitsArray包含了“奶酪”这个词,那么它会找到一个匹配的词(我无法想象一款配奶酪的葡萄酒配芝士蛋糕也很好)。所以,我认为,这里有一个更好的解决方案,将objectSuit分解成单独的单词,并将它们放在一个集合中。SuitesArray也被转换为一个集合,因此我们可以使用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以空格开头,包括逗号、句点和分号。您可能还想包括其他内容,但我认为这在大多数情况下都适用。

您想用这行代码做什么:NSString*suitsString=[NSString stringWithFormat:@“%@”,suitsArray];但我认为这将使suitsString看起来就像对数组进行日志记录一样,这意味着它也将包含任何括号和花括号。你的rangeOfString:方法向后看——你试图在objectSuits中找到SuitesString,但由于我前面提到的问题,它永远不会发生。我不确定您希望搜索是什么--您是想查看SuitesRay中的字符串是否在ObjectSuites中,还是相反?是的,我想查看SuitesRay中的字符串是否存在于ObjectSuites字符串中。然后将匹配项添加到resultObjectsArray。那么您的问题是什么?如何使NSString*suitsString=suitsArray中的单词,并将其与objectSuits进行比较,然后将正匹配项添加到resultObjectsArray。?编辑了我的问题。我真正想要的是你在评论中所说的:看看objectSuits(“Suits”键的值)是否包含suitsArray的单词。我希望将这些对象添加到结果中。我仍然不确定我是否理解——因此,ObjectSuites中与SuitesRay中的任何单词匹配的任何单词,您希望添加到结果中(不是匹配整个字符串,而是单个单词)?举个例子也许会有帮助。如果suitsArray包含“牛排”、“奶酪”等词。一个对象(字典)有一个关键的“Suits”值,比如:“这款酒适合牛排、奶酪和蘑菇。”然后这个对象被添加到结果中。非常感谢——这正是我所需要的!不过,我确实希望它也能在其他单词中找到这个词,比如“芝士蛋糕”是一个积极的搭配。奶酪蛋糕无论如何都不会出现在字符串中,但“cheesetable”和“grillED”可能出现在字符串中,因此“cheese”和“grill”应该与这些单词相匹配,尽管在某些情况下可能会产生不符合逻辑的结果,但这比排除它们要好。再次感谢你1000次!
NSCharacterSet *sepSet = [NSCharacterSet characterSetWithCharactersInString:@" ,.;"];
    NSArray *words = [objectSuits componentsSeparatedByCharactersInSet:sepSet];
    NSSet *objectSuitsWords = [NSSet setWithArray:words];
    NSSet *suitsSet = [NSSet setWithArray:suitsArray];
    BOOL ans = [suitsSet intersectsSet:objectSuitsWords];