检查字符串包含阵列的任何字符串 [英] Check if String contains any String from array
问题描述
我知道我可以检查一个字符串包含另一个字符串像这样
的NSString *字符串= @你好喇嘛喇嘛;
如果([字符串rangeOfString:@喇嘛。位置== NSNotFound){
的NSLog(@字符串不包含喇嘛);
}其他{
的NSLog(@字符串包含喇嘛!);
}
但是,如果我有一个的NSArray * arary = @ @一,@二,@三,@四个一]
和我要检查是否字符串包含其中任何一个没有正当环或有一堆或公司( ||
)。因此,这将是这样的
如果(阵列包含一个或两个或三个或四个){
//做一点事
}
但是,如果我有一个较长的数组这很乏味所以是有另一种方式,只是没有通过循环?
修改
我要检查是否有myArray的任何论文值的valuesArray
valuesArray = @ @一,@二,@三,@四个一];
myArray的= [@我有一个头,@我有两个脚,@我有五个手指]
输出
outputArray = @ @我有一个头,@我有两个脚]
有你去:
的NSArray * arrRet = [myArray的filteredArrayUsing predicate:NS predicate predicateWithBlock:^ BOOL(ID __nonnull evaluatedObject,NSDictionary的<的NSString *,ID> * __nullable绑定){
对于(的NSString * VAL在valuesArray){
如果([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;
[valuesArray 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屋!