Remove objects using NSPredicate

后端 未结 3 811
盖世英雄少女心
盖世英雄少女心 2021-01-03 15:47

I have the folloving dictionary which has many sub dictionaries. How can I remove objects where isChanged = 1 from parent dictionary using NSPredicate

相关标签:
3条回答
  • 2021-01-03 16:12

    I solved my problem in the following way:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isChanged == %d", 1];
    
    NSArray *allObjs = [parentDict.allValues filteredArrayUsingPredicate:predicate];
    
    [allObjs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSMutableArray *keys = [[NSMutableArray alloc] initWithCapacity:0];
        [keys setArray:[parentDict allKeysForObject:obj]];
        [parentDict removeObjectsForKeys:keys];
        [keys release];
    }];
    
    0 讨论(0)
  • 2021-01-03 16:28

    As a simple alternative to using NSPredicate, you can use the NSDictionary's built in keysOfEntriesPassingTest: This answer assumes "isChanged" is an NSString and the value 0 or 1 is an NSNumber:

    NSSet *theSet = [dict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) {
        return [obj[@"isChanged"] isEqualToNumber: @1];
    }];
    

    The returned set is a list of keys that pass the test. From there, you could remove all that matched with:

    [dict removeObjectsForKeys:[theSet allObjects]];

    0 讨论(0)
  • 2021-01-03 16:33

    when you have array of dictionary than you can remove selected category's data using NSPredicate

    here is code

    NSString *selectedCategory = @"1";
    
    //filter array by category using predicate
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isChanged == %@", selectedCategory];
    
    NSArray *filteredArray = [yourAry filteredArrayUsingPredicate:predicate];
    
    [yourAry removeObject:[filteredArray objectAtIndex:0]];  
    

    But in your problem data is not in array it is in dictionary

    your data should be in this format

    (
     {
         cellHeight = 437;
         isChanged = 1;
     },
     {
         cellHeight = 145;
         isChanged = 0;
     },
     {
         cellHeight = 114;
         isChanged = 1;
     }
     )
    
    0 讨论(0)
提交回复
热议问题