如何使用 NSPredicate 过滤这些 NSArray?
Posted
技术标签:
【中文标题】如何使用 NSPredicate 过滤这些 NSArray?【英文标题】:How to filter these NSArray with NSPredicate? 【发布时间】:2013-10-01 08:02:39 【问题描述】:-(void) vUpdateHistoryAndSuggestionEntries
NSArray * potentialHistory = [[self class] arHistory];
potentialHistory 是 NSString
对象的数组。
我想以不区分大小写的方式仅过滤以@"Cat" 开头的元素。例如,
如果 NSArray 包含
凯茜 猫 狗
然后我想要一个包含的数组
凯茜 猫
我认为 NSPredicate 非常适合这个。任何其他方式也可以。
有类似的问题。但是,在这些问题中, NSArray 包含字典。我想根据数组的实际元素而不是数组元素的元素进行过滤。
【问题讨论】:
【参考方案1】:NSArray *yourArray;
NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] 'C'"];
NSArray *theFilteredArray = [yourArray filteredArrayUsingPredicate:aPredicate];
希望这会对您有所帮助。
【讨论】:
【参考方案2】:这是一个如何使用 NSPredicate 的示例:
NSArray *sampleArray = @[@"Cathy", @"Cat", @"Dog"];
NSArray *filteredSampleArray = [sampleArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self contains[c] %@",@"ca"]];
NSLog(@"%@",filteredSampleArray);
这将输出:
( 凯茜, 猫 )
【讨论】:
【参考方案3】:NSString *filterStr = [NSString stringWithFormat:@"name LIKE[c] '*%1$@*'",searchStr];
NSPredicate *predicate = [NSPredicate predicateWithFormat:filterStr];
NSMutableArray *tempArray = [yourArrayofNames filteredArrayUsingPredicate:predicate];
//这里 name 是你的属性,yourArrayofNames 是你的对象数组。
【讨论】:
【参考方案4】:您不需要 NSPredicate
来解决这个问题。
for (NSString* item in arHistory)
if ([item rangeOfString:@"cat" options:NSCaseInsensitiveSearch].location == 0)//occurs at beginning
[potentialHistory addObject:item];
编辑:如果 potentialHistory 是不可变的,请使用另一个数组来存储这些和init
potentialHistory。
NSArray* potentialArray = [NSArray arrayWithArray:(NSArray*)array]
【讨论】:
没错,您不需要NSPredicate
。但这是不好的做法。
我明白了。有什么具体原因吗?以上是关于如何使用 NSPredicate 过滤这些 NSArray?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 NSPredicate 过滤 Core Data 托管对象?
iPhone如何使用NSPredicate按父实体过滤Core Data?
如何使用 NSPredicate 从另一个 NSMutableArray 中过滤 NSMutableArray