gpt4 book ai didi

ios - 通过锚定搜索第二个、第三个等单词对字符串数组进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:15:03 25 4
gpt4 key购买 nike

我的意思是得到一个数组,其中包含如下单词:

@[@"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"

等等:)

我在 block 返回数组中执行:

    // 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。这真的很糟糕。如何优化它?

最佳答案

如果我没有正确理解你的问题,那么你想匹配任何包含以你的搜索字符串开头的单词的字符串?

具有正则表达式的 NSPredicate 可以做到这一点,使用 \b 字边界 anchor 。

NSArray *data = @[@"Hellobla", @"Hello Kitty", @"Hello Kitty Bla", @"Bla apukitty", @"Bla helkitty"]; 

NSString *searchString = @"Hel"; // Change to other strings

NSString *anchoredPattern = [NSString stringWithFormat: @".*\\b%@.*", searchString];

NSPredicate *anchoredPred = [NSPredicate predicateWithFormat: @"SELF MATCHES[cd] %@", anchoredPattern];

NSArray *filtered = [data filteredArrayUsingPredicate:anchoredPred];

它会产生您想要的结果,可能的异常(exception)是它在结果中同时包含“Hello Kitty”和“Hello Kitty Bla”。

如果这不是您想要的,您可能需要再次过滤结果以排除作为数组中其他字符串的子字符串的字符串。

关于ios - 通过锚定搜索第二个、第三个等单词对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com