gpt4 book ai didi

ios - 过滤字典数组和字符串数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:39 24 4
gpt4 key购买 nike

我有一个数组,其中包含字典数组和字符串数组我想用字典值过滤,但是当我进行过滤时,只有当我在文本字段中键入第一个字母时我才会得到结果我已经为 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

最佳答案

你有一个混合类型的数组(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];

但是,如果可以的话,真的要重新考虑在同一个数组中混合类型,这很可能会导致 future 出现问题。

关于ios - 过滤字典数组和字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29668023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com