gpt4 book ai didi

ios - NSPredicate 按字母过滤

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:23:16 24 4
gpt4 key购买 nike

如何创建一个 NSPredicate 来查找数组中包含特定字母的所有对象?

NSMutableArray *testArray = [[NSMutableArray alloc] initWithObjects:@"abc",@"cba", @"bca", nil];

NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@",@"abc"];

NSMutableArray *result = (NSMutableArray *)[testArray filteredArrayUsingPredicate: p];

结果只包含一个对象,@"abc"...我希望它能捕获所有包含"abc"的单词。 (例如“cba”、“cba”、“llllllllbbacllllll”等)。

最佳答案

其他答案都没有问题。但是,我想建议一种不同的方法来创建谓词:使用 block 。

NSArray *testArray = @[@"abc", @"cba", @"cda"];
NSArray *letters = @[@"a", @"b", @"c"];

NSPredicate *p = [NSPredicate predicateWithBlock:^BOOL(id string, NSDictionary *bindings) {
for ( NSString *letter in letters ) {
NSStringCompareOptions options = NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch;
if ( ! [string rangeOfString:letter options:options].length ) {
return NO;
}
}
return YES;
}];
NSArray *result = [testArray filteredArrayUsingPredicate:p];

为了好玩,您还可以用子查询编写谓词。这效率较低,但它是较短的解决方案。

NSArray *testArray = @[@"abc", @"cba", @"bcda"];
NSArray *letters = @[@"a", @"b", @"c"];

NSPredicate *p = [NSPredicate predicateWithFormat:@"SUBQUERY(%@, $a, self CONTAINS[cd] $a)[SIZE] == %d", letters, letters.count];
NSArray *result = [testArray filteredArrayUsingPredicate:p];

关于ios - NSPredicate 按字母过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339925/

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