ios - 如何从 NSDictionary 中删除作为 NSDictionary 元素的条目?

标签 ios objective-c nsdictionary

我有一个问题,我很长时间都无法解决。我有一个来自服务器的 JSON 响应,它被解析为 NSDictionary lastMsgs,如下图所示: enter image description here

因此,例如 1323 它是一个键,它与 NSDictionary(包含正文、主题等键和值)相关联。所以我需要以某种方式删除嵌套 NSDictionary 值具有条目的条目的问题:type = 1。我不知道如何执行此操作。我试着这样做:

  NSMutableArray* _ModelVals = [[lastMsgs allValues] mutableCopy];
    for (int i =0; i<[_ModelVals count]; i++) {
        string_compare = [NSString stringWithFormat:@"%@" , [_ModelVals objectAtIndex:i]];
        if ([string_compare rangeOfString:@"type = 1"].location != NSNotFound) {
            [_ModelVals removeObjectAtIndex:i];
        }

    }

但它无法正常工作,并没有删除所有类型为 1 的条目。

所以问题是 - 我如何实现它并删除嵌套 NSDictionary 中的条目?

最佳答案

字典中没有值“type = 1”。那只是日志。您可以使用 [dict objectForKey:@"key"]dict[@"key"] 获取字典中键的值。

从你的日志来看,类型似乎是一个NSNumber,而不是一个NSString。只需获取它的 int 表示(假设类型是整数)并使用简单的 C intint 比较。

而且您不能像那样过滤数组。您将跳过一个条目。如果删除条目,则必须将 i 减少 1

或者使用这个更简单的解决方案:

NSSet *keys = [lastMsgs keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
    return [obj[@"type"] intValue] == 1;
}];
NSMutableDictionary *dict = [lastMsgs mutableCopy];
[dict removeObjectsForKeys:[keys allObjects]];

这将首先收集类型为 1 的所有对象(字典)的键,然后从原始字典的可变副本中删除这些键。

关于ios - 如何从 NSDictionary 中删除作为 NSDictionary 元素的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441476/

相关文章:

ios - AVAssetExportSession 导出速度太慢

iphone - 使用键存储数组并按输入顺序对它们进行排序的最佳方法

iphone - iOS:UIStepper:更改值更新的速度?

ruby-on-rails - 安全认证: Rails WebApp and iOS App

ios - 向 UIAlertView 添加声音的正确方法

ios - 如何创建对象之间间隔为 5 分钟的时间 NSArray?

ios - 将 JSON 解析为字典,判断真假

ios - '[NSObject : AnyObject ]' is not identical to ' NSDictionary', RKPathMatcher 问题

c# - 如何避免人们使用我在文本框中支持的字符以外的其他字符?

ios - 使用 'Delegation' : Objective-C 在两个 View Controller 之间传递数据