2021-03-05

本地模糊查询

本文记录了在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的使用语法稍有不同

你可能感兴趣的:(2021-03-05)