次のような単語を含む配列を取得したことを意味します。
@[@"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 を超える可能性があります。そして、それは本当にひどいです。それを最適化する方法は?