iOS 根据匹配输入的字符串筛选数组,并根据匹配到的子字符串在父字符串中的位置排序

筛选数组

创建筛选谓词

    // 搜索条件:不区分大小写, 根据国家的name 筛选
    NSString *searchString = self.searchTF.text;
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name CONTAINS [cd] %@", searchString];

使用谓词筛选数组

     // 搜索后的数据
    NSArray *array = [allDataArray filteredArrayUsingPredicate:predicate];

排序

    array = [array sortedArrayUsingComparator:^NSComparisonResult (id _Nonnull obj1, id _Nonnull obj2) {
    
    
      return [self sortWithSearchString:searchString string1:newObj1.name string2:newObj2.name];
   }];

- (NSComparisonResult)sortWithSearchString:(NSString *)searchString string1:(NSString *)string1 string2:(NSString *)string2
{
    
    
    // 不区分大小写
    searchString = [searchString lowercaseString];
    string1 = [string1 lowercaseString];
    string2 = [string2 lowercaseString];
    // 获取被搜索的字符串,在被比较的两个字符串中的索引,并进行比较
    NSInteger index1 = [string1 rangeOfString:searchString].location;
    NSInteger index2 = [string2 rangeOfString:searchString].location;
    if (index1 < index2) {
    
    
        return NSOrderedAscending;
    } else if (index1 > index2) {
    
    
        return NSOrderedDescending;
    } else {
    
    
        return [string1 compare:string2];
    }
}

Guess you like

Origin blog.csdn.net/LIUXIAOXIAOBO/article/details/121628568