本地模糊查询
本文记录了在OC和Swift语言中,使用NSPredicate在本地数组里进行模糊查询
- OC篇
/// 搜索
/// @param str 关键字
- (void)p_searchCountry:(NSString *)str{
NSMutableString *mStr = [NSMutableString stringWithString:str];
for (int i = 0; i < str.length*2+1; i+=2) {
[mStr insertString:@"*" atIndex:i];
}
NSString *aaStr = [NSString stringWithFormat:@"SELF LIKE[cd] '%@'",mStr];
NSPredicate *predicate = [NSPredicate predicateWithFormat:aaStr];
self.searchResultArr = [self.listArr filteredArrayUsingPredicate:predicate];
}
模糊查询的关键之处在于定义查询条件,例如:输入框输入的关键字是@"86",而我们要检索的模糊条件就必须是@"*8*6*",其中 * 号就表示了86的各种组合,比如@"10086"、@"8600"、@"A8T6M"、@"AT86M"等等,不管86是分开的还是连在一起的,是在开头还是结尾等等,都可以检索出来。
- Swift篇
func searchCountry(searchKey: String) {
var mStr = "*"
for character in searchKey {
mStr.append("\(character)*")
}
let predicate = NSPredicate(format: "SELF LIKE[cd] '\(mStr)'")
let array = self.listArr.filtered(using: predicate)
self.searchResultArr = array as NSArray
}
Swift和OC的逻辑还是一样的,只是NSPredicate的使用语法稍有不同
网友评论