gpt4 book ai didi

iphone - NSPredicate 匹配任意字符

转载 作者:太空狗 更新时间:2023-10-30 03:27:55 25 4
gpt4 key购买 nike

如何构造一个 NSPredicate 来查找 Arrays 对象中任意位置的搜索词?我不能完全正确地解释它,所以这里有一个例子。

NSArray *array = @[@"Test String: Apple", @"Test String: Pineapple", @"Test String: Banana"];
NSString *searchText = @"Apple";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", searchText];
NSArray *filteredArray = [array filteredArrayUsingPredicate:predicate];
NSLog(@"filteredArray: %@", filteredArray);

// filteredArray: (
// "Test String: Apple",
// "Test String: Pineapple"
// )

但是如果我使用 NSString *searchText = @"Test Str Appl"; 我得到零结果。我希望它匹配此字符串的相同结果。

我正在寻找的是一个类似于 Xcode 中“快速打开”菜单的搜索功能,搜索字符串的措词是否正确并不重要,只要字母的顺序正确即可一场比赛。我真的希望这是有道理的。

Open Quickly Menu

最佳答案

谓词中的LIKE 字符串比较允许使用通配符*?,其中* 匹配0 个或多个人物。因此,如果您将搜索文本转换为

NSString *searchWithWildcards = @"*T*e*s*t* *S*t*r*A*p*p*l*";

通过在原始搜索文本的开头、所有字符之间和末尾插入 *,方法如下

NSMutableString *searchWithWildcards = [NSMutableString stringWithFormat:@"*%@*", self.searchField.text];
if (searchWithWildcards.length > 3)
for (int i = 2; i < self.searchField.text.length * 2; i += 2)
[searchWithWildcards insertString:@"*" atIndex:i];

然后你就可以使用了

[NSPredicate predicateWithFormat:@"SELF LIKE[cd] %@", searchWithWildcards];

谓词按给定顺序搜索字符,它们之间有任意其他字符。


例如,可以使用以下代码完成转换:

NSMutableString *searchWithWildcards = [@"*" mutableCopy];
[searchText enumerateSubstringsInRange:NSMakeRange(0, [searchText length])
options:NSStringEnumerationByComposedCharacterSequences
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[searchWithWildcards appendString:substring];
[searchWithWildcards appendString:@"*"];
}];

关于iphone - NSPredicate 匹配任意字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15091155/

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