Jon*_*nah 5 objective-c filter nspredicate ios
我使用NSPredicate通过州和国家列表过滤NSDictionary.
所有数据都以逗号分隔的数组存储:@"Alabama",@"Alaska",@"Arizona",@"Arkansas",@"California",@"Colorado"等
但是,有两种情况发生重复.州"新墨西哥州"包含"墨西哥"一词,"阿肯色州"包含"堪萨斯州"一词.
这是我用来定义谓词的基本代码.
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Location contains[c] %@", @"Kansas"];
Run Code Online (Sandbox Code Playgroud)
我如何确保"堪萨斯"不会返回"阿肯色州"的物品?使用BEGINSWITH或LIKE不起作用,因为列表以其他状态开头.
谢谢!
让我们看看我的理解是否正确。您有一本字典,其中有一个键“Location”,其对象是一个以逗号分隔的州名称的字符串。听起来你需要一个正则表达式来匹配。
NSString* expr = [NSString stringWithFormat:@"^%1$@.*|.*, %1$@.*", @"Kansas"]
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"Location MATCHES[c] %@", expr];
Run Code Online (Sandbox Code Playgroud)
现在,以下是它在不同示例中的表现:
@{@"Location": @"Kansas, Arkansas, Alabama"} //Pass
@{@"Location": @"Alabama, Kansas"} //Pass
@{@"Location": @"Arkansas, Alabama"} //Fail
Run Code Online (Sandbox Code Playgroud)
正则表达式^%1$@.*|.*, %1$@.*测试提供的单词是否位于字符串的开头或后跟字符和“,”(将其放在中间)。%1$@采用第一个参数,以便可以多次使用它,而不是多次提供相同的字符串。
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |