我有一个问题,我很长时间都无法解决。我有一个来自服务器的 JSON 响应,它被解析为 NSDictionary lastMsgs,如下图所示:
因此,例如 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 int
到 int
比较。
而且您不能像那样过滤数组。您将跳过一个条目。如果删除条目,则必须将 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/