我知道我可以检查一个字符串是否包含另一个像这样的字符串
NSString *string = @"hello bla bla";
if ([string rangeOfString"bla"].location == NSNotFound) {
NSLog(@"string does not contain bla");
} else {
NSLog(@"string contains bla!");
}
但是如果我有一个 NSArray *arary = @[@"one",@"two", @"three", @"four"] 并且我想检查一个字符串包含其中之一而不只是循环或有一堆或 (|| )。所以它会是这样的
if (array contains one or two or three or four) {
//do something
}
但是如果我有一个更长的数组,这会变得乏味,那么有没有另一种方法,而不只是循环?
编辑
我想检查 myArray 是否在 valuesArray 中有任何这些值
valuesArray =@[@"one",@"two", @"three", @"four"];
myArray = [@"I have one head", @"I have two feet", @"I have five fingers"]
输出
outputArray = @[@"I have one head", @"I have two feet"]
Best Answer-推荐答案 strong>
你去吧:
NSArray* arrRet = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id __nonnull evaluatedObject, NSDictionary<NSString *,id> * __nullable bindings) {
for(NSString* val in valuesArray) {
if ([evaluatedObject rangeOfString:val].location != NSNotFound)
return true;
}
return false;
}]];
arrRet 恰好包含两个所需的字符串。
更神奇的一点是,您无需编写循环即可获得代码
NSArray* arrRet = [myArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary<NSString *,id> * bindings) {
BOOL __block match = false;
[valuesArray enumerateObjectsUsingBlock:^(id __nonnull obj, NSUInteger idx, BOOL * __nonnull stop) {
*stop = match = [evaluatedObject rangeOfStringbj].location != NSNotFound;
}];
return match;
}]];
关于ios - 检查字符串是否包含数组中的任何字符串,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/30987329/
|