筛选字典与字符串的二维数组

3
我有一个包含字典和字符串数组的数组,我想通过字典值进行过滤, 但是当我进行过滤时,只有在我在文本字段中输入第一个字母时才会得到结果,我已经为nspredicate搜索编写了此代码。 同时,我已经附上了包含用于过滤的值的NSarry的屏幕截图。
以下是搜索数组的代码:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;   // return NO to not change text
{

    NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string];

    NSLog(@"%@",searchStr);
     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@ ",searchStr];
    NSArray *filteredArr = [arrmainData filteredArrayUsingPredicate:predicate];
    detailListArray=[[NSMutableArray alloc]initWithArray:filteredArr];
    [tblGlosary reloadData];

    return true;
}

这是一个数组的截屏:

enter image description here

1个回答

0

你有一个混合类型的数组(NSStringNSDictionary),这通常是一个非常糟糕的想法(在 Swift 中也不可能实现)。

如果由于某种原因你无法控制它并且确实需要过滤它,那么你需要根据类型正确地进行比较:

NSIndexSet *matches = [arrmainData indexesOfObjectsPassingTest:BOOL^(id obj, NSUInteger idx, BOOL *stop) {
    NSString *stringToCompare = nil;

    if ([obj isKindOfClass:[NSString class]]) {
        stringToCompare = (NSString *)obj;
    } else {
        NSDictionary *dict = (NSDictionary *)obj;
        stringToCompare = dict["Name"];
    }

    return [stringToCompare rangeOfString:searchString].location != NSNotFound;
 }];

 NSArray *filteredArray = [arrmainData objectsAtIndexes:matches];

但是再说一遍,如果可以的话,请真正重新考虑在同一个数组中混合使用不同类型,这很可能会导致未来出现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接