简体   繁体   English

从NSMutableDictionary中删除多个值

[英]Deleting multiple values from NSMutableDictionary

I have a NSMutableDictionary *categoryTableArray; 我有一个NSMutableDictionary *categoryTableArray; which has data in this format 具有这种格式的数据

MY_CATEGORY : {
    "Generation 2" =     (
                {
            id = 34;
            name = Footwear;
        }
    );
    "Generation 3" =     (
                {
            id = 53;
            name = Party;
        }
    );
    "Generation 5" =     (
                {
            id = 72;
            name = hash1;
        },
                {
            id = 86;
            name = uhgyututyutguhgjhbj;
        }
    );
}

On selecting some items for deletion I will get a id list in NSMutableArray *deletedArray; 选择一些要删除的项目后,我将在NSMutableArray *deletedArray;获得一个ID列表NSMutableArray *deletedArray; which is in this format 这是这种格式

Delete List:(
        {
        id = 72;
    },
        {
        id = 53;
    }
)

I need an efficient way to delete the object corresponding to the id in delete list which is in my categoryTableArray. 我需要一种有效的方法来删除与我的categoryTableArray中的删除列表中的id对应的对象。 My current solution is to modify my Delete list to have a Generation label as well and then delete, I was wondering if there is any other efficient way without modifying the Delete list array. 我当前的解决方案是将Delete列表修改为也具有Generation标签,然后删除,我想知道是否还有其他有效的方法可以不修改Delete list数组。

Here's some test code I wrote for you. 这是我为您编写的一些测试代码。 Enjoy :) 请享用 :)

- (void)filterCategories
{
    NSMutableDictionary *categoryTableArray = [@{@"Generation 2": @[@{@"id": @(34), @"name": @"Footwear"}],
                                                 @"Generation 3": @[@{@"id": @(53), @"name": @"Party"}],
                                                 @"Generation 5": @[@{@"id": @(72), @"name": @"hash1"},
                                                                    @{@"id": @(86), @"name": @"uhgyututyutguhgjhbj"}]} mutableCopy];
    NSArray *deleteList = @[@{@"id": @(72)},
                            @{@"id": @(53)}];

    NSLog(@"Before deletion:\n%@", categoryTableArray);
    [self deletIDs:deleteList fromCategories:categoryTableArray];
    NSLog(@"After deletion:\n%@", categoryTableArray);
}

- (void)deletIDs:(NSArray *)deleteList fromCategories:(NSMutableDictionary *)categories
{
    // Convert the array of dictionaries into just an array of IDs.
    NSArray *ids = [deleteList valueForKeyPath:@"id"];
    for (NSString *key in [categories allKeys])
    {
        categories[key] = [categories[key] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"NOT id IN %@", ids]];
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM