NSPredicate for exact match

 NSArray *arrData = [NSArray arrayWithObjects:
                    @"cloud,country,plant",
                    @"country,cloud,plant",
                    @"country,plant,cloud",
                    @"clouds,country,plant"
                    ,@"country,clouds,plant",
                    nil];

From above NSArray, I want objects which having a word “cloud”

I tried below code

  • Libssh2-iOS, CocoaPod linker error
  • iOS Simulator button not centered
  • UIRefreshControl: UITableView 'stuck' while refreshing
  • iOS UINavigationBar vs UIToolbar vs UITabBar
  • Shadow on UIView layer
  • Should superview's gesture cancel subview's gesture in iOS 7?
  • NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(self beginswith %@ OR self contains[CD] %@)",@"cloud",@",cloud"];
    NSArray *arrResult = [arrData filteredArrayUsingPredicate:predicate];
    

    But it’s giving all 5 objects in arrResult. But I need only 3 (0,1,2) objects.

    3 Solutions Collect From Internet About “NSPredicate for exact match”

    Try:

     NSPredicate* predicate = [NSPredicate predicateWithBlock:^(NSString* string, NSDictionary* options){
    
        NSArray* array = [string componentsSeparatedByString:@","];
    
        return [array containsObject:@"cloud"];
    
    }];
    

    Try below code,

    It will work,

     NSPredicate *hsPredicate = [NSPredicate predicateWithBlock:^BOOL(id  _Nonnull evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
            NSArray *sepretArray =[((NSString*)evaluatedObject) componentsSeparatedByString:@","];
            NSPredicate *subPredicate = [NSPredicate predicateWithFormat:@"self == %@",@"cloud"];
            return  ([sepretArray filteredArrayUsingPredicate:subPredicate].count > 0);
    
        }];
        NSArray *arrResult = [arrData filteredArrayUsingPredicate:hsPredicate];
    

    This one do the trick.But i don’t know whether it is the efficient way of doing this.

     NSArray *arrData = [NSArray arrayWithObjects:
                        @"cloud,country,plant",
                        @"country,cloud,plant",
                        @"country,plant,cloud",
                        @"clouds,country,plant"
                        ,@"country,clouds,plant",
                        nil];
    
    NSMutableArray *resArray = [[NSMutableArray alloc]init];
    for(NSString *tempString in arrData)
    {
        NSArray *cache = [tempString componentsSeparatedByString:@","];
        if([cache containsObject:@"cloud"])
          {
            [resArray addObject:tempString];
          }
    }