2

次のような単語を含む配列を取得したことを意味します。

@[@"Hellobla", @"Hello Kitty", @"Hello Kitty Bla", @"Bla apukitty", @"Bla helkitty"]

スペースで区切られたすべての単語をアンカーのように並べ替える必要があります@" "

入力"Hel"すると表示されます@"Hellobla", @"Hello Kitty Bla", @"Bla helkitty"

入力"kit"すると表示されます@"Hello Kitty Bla", @"Hello Kitty"

入力"bla"すると表示されます@"Hello Kitty Bla", @"Bla apukitty", @"Bla helkitty"

など:)

私はブロックリターン配列でそれを行います:

    // arrayWithData - All Words
    // searchWord - Text i try to search with
    // arrayToWrite - array to return with words
    // arrayToCompare - array with words already added whitch first NSPredicate *beginPredicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH[cd] %@", //searchText];

beginMatch = [self.objects filteredArrayUsingPredicate:beginPredicate];

   sortedWithSecondWordArray = ^(NSArray * arrayWithData,
                                  NSString * searchWord,
                                  NSMutableArray *arrayToWrite,
                                  NSArray * arrayToCompare) {

        NSString *space = @" ";

        for (__strong NSString *string in arrayWithData) {
            NSString *staticString = string; 
            while ([string rangeOfString:space].location != NSNotFound) {
                NSRange range = NSMakeRange(0, [string rangeOfString:space].location);

                NSString *keyword = [[string stringByReplacingCharactersInRange:range withString:@""] trim];

                if (keyword.length > 0
                    && [keyword rangeOfString:searchWord options:NSAnchoredSearch].location != NSNotFound
                    && ![arrayToCompare containsObject:staticString]
                    && ![arrayToWrite containsObject:staticString]) {

                    [arrayToWrite addObject:staticString];
                }
                string = keyword;
            };
        }
        return arrayToWrite;
    };

動作しますが、Array 2000 文字列の場合、10k を超える可能性があります。そして、それは本当にひどいです。それを最適化する方法は?

4

2 に答える 2

0

あなたは検索がうまくいっていると言っていますが(質問では何をすべきかは明確ではありません)、速度が心配です。明らかに遅いですか、それとも遅くなると予測していますか?

バイト数ではなく、文字列数が速度の要因です。2000 は大きいですが、私の直感では、力ずくで十分に速くなると思います。

あるいは、検索の最適化は大きなトピックですが、ほとんどの解決策は次のように要約できます: インデックスを作成します。例'Tries' をチェックしてください

于 2013-03-21T16:30:01.490 に答える