检查字符串包含阵列的任何字符串 [英] Check if String contains any String from array

查看:202
本文介绍了检查字符串包含阵列的任何字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 的NSString *字符串= @你好喇嘛喇嘛;
如果([字符串rangeOfString:@喇嘛。位置== NSNotFound){
  的NSLog(@字符串不包含喇嘛);
}其他{
  的NSLog(@字符串包含喇嘛!);
}

但是,如果我有一个的NSArray * arary = @ @一,@二,@三,@四个一] 和我要检查是否字符串包含其中任何一个没有正当环或有一堆或公司( || )。因此,这将是这样的

 如果(阵列包含一个或两个或三个或四个){
//做一点事
}

但是,如果我有一个较长的数组这很乏味所以是有另一种方式,只是没有通过循环?

修改

我要检查是否有myArray的任何论文值的values​​Array

  values​​Array = @ @一,@二,@三,@四个一];
myArray的= [@我有一个头,@我有两个脚,@我有五个手指]

输出

  outputArray = @ @我有一个头,@我有两个脚]


解决方案

有你去:

 的NSArray * arrRet = [myArray的filteredArrayUsing predicate:NS predicate predicateWithBlock:^ BOOL(ID __nonnull evaluatedObject,NSDictionary的<的NSString *,ID> * __nullable绑定){
    对于(的NSString * VAL在values​​Array){
        如果([evaluatedObject rangeOfString:VAL]!= .location NSNotFound)
            返回true;
    }
    返回false;
}]];

arrRet 正好包含两个所需的字符串。

一点点魔力后,你有你的code无需编写一个循环:P

 的NSArray * arrRet = [myArray的filteredArrayUsing predicate:NS predicate predicateWithBlock:^ BOOL(ID evaluatedObject,NSDictionary的<的NSString *,ID> *绑定){
    BOOL __block匹配= FALSE;
    [values​​Array enumerateObjectsUsingBlock:^(ID __nonnull OBJ,NSUInteger IDX,BOOL * __nonnull停止){
        *站比赛= = [evaluatedObject rangeOfString:OBJ]!= .location NSNotFound;
    }];
    返回匹配;
}]];

I know I can check if a string contains another string like this

NSString *string = @"hello bla bla";
if ([string rangeOfString:@"bla"].location == NSNotFound) {
  NSLog(@"string does not contain bla");
} else {
  NSLog(@"string contains bla!");
}

But what if I have an NSArray *arary = @[@"one",@"two", @"three", @"four"] and I wanted to check if a string contains either one of these without just loop or have a bunch of or's (|| ). So it would be something like this

if (array contains one or two or three or four) {
//do something
}

But if I have a longer array this becomes tedious so is there another way, without just looping through?

EDIT

I want to check if myArray has any of theses values in valuesArray

valuesArray =@[@"one",@"two", @"three", @"four"];
myArray = [@"I have one head", @"I have two feet", @"I have five fingers"]

OUTPUT

outputArray = @[@"I have one head", @"I have two feet"]

解决方案

There you go:

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 contains exactly the two desired strings.

A little bit more magic later you have your code without writing a loop :P

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 rangeOfString:obj].location != NSNotFound;
    }];
    return match;
}]];

这篇关于检查字符串包含阵列的任何字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆