OStack程序员社区-中国程序员成长平台

标题: ios - 检查字符串是否包含数组中的任何字符串 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 11:06
标题: ios - 检查字符串是否包含数组中的任何字符串

我知道我可以检查一个字符串是否包含另一个像这样的字符串

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-推荐答案


你去吧:

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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4