-1

最初の検索基準として 2 つのスライダーの値を使用しています。


次に、2 つ目の基準が必要です。私は

NSMutableArray *suitsArray;

これは最大 10 個の単語を含むか、空 (0 個の単語) にすることができます。配列の例:

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

私が欲しいのはこれです:

suitArray が上記のように、単語のきのこグリル、およびピザを含む場合

辞書の「スーツ」値は次のとおりです。「このワインは、キノコ料理、グリル料理、ピザ、チキンに適しています。」

このディクショナリは 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

rangeOfStringを使用するよりも、suitsArrayに文字列objectSuitsが含まれているかどうかを確認することをお勧めします。

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;
        }
    }

2番目の編集:さらに検討した後、上記のコードには、重要な場合と重要でない場合があるロジックの欠陥があります。rangeOfStringを使用しているため、他の単語内の単語を検索します。したがって、objectSuitsが「このワインはチーズケーキによく合う」であり、suitsArrayにチーズという単語が含まれている場合、一致するものが見つかります(チーズに適したワインがチーズケーキに適しているとは想像できません)。したがって、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 に答える