用于从Dictionary中查找空值的捷径技术?

我在nsmutabledictornary中有100个键和值,我想检查任何值是否为null。 你有短暂的function或技巧吗?

我不想要检查每个键和值的多行代码。 你的回答将不胜感激。

此代码将为您提供具有(非)空值的键集。 您不能将实际的nil值存储在字典中,因此假定[NSNull null] 。 该谓词可以轻易地改变任何其他条件。

 NSDictionary *d = @{ @"a" : @"1", @"b" : [NSNull null] }; NSSet *nullKeys = [d keysOfEntriesPassingTest:^BOOL(NSString *key, id obj, BOOL *stop) { return [d[key] isKindOfClass:[NSNull class]]; }]; NSSet *nonnullKeys = [d keysOfEntriesPassingTest:^BOOL(NSString *key, id obj, BOOL *stop) { return [d[key] isKindOfClass:[NSNull class]] == NO; }]; 

从这里,您可以根据需要使用键生成相应的字典。

 NSMutableDictionary *nonNullDict = [NSMutableDictionary dictionary]; [d enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { if ([nonnullKeys contains:key]) { nonNullDict[key] = obj; } }]; 

如果您不需要单独的键列表,只需要过滤的字典,请跳过第一步并修改第二部分,如下所示:

 NSMutableDictionary *nonNullDict = [NSMutableDictionary dictionary]; [d enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { if ([obj isKindOfClass:[NSNull null]] == NO) { nonNullDict[key] = obj; } }]; 

在NSDictionary上写类别它会为你提供null null字典。 这是我为自己写的类别。

.h文件的代码(接口)

 #import  @interface NSDictionary (CheckNull) { } - (NSDictionary *)nullFreeDictionary; @end 

.m文件的代码。 (实现)

 #import "NSDictionary+CheckNull.h" @implementation NSDictionary (CheckNull) - (NSDictionary *) nullFreeDictionary { NSMutableDictionary *tempDictionary = [self mutableCopy]; for (NSString *key in tempDictionary.allKeys) { NSString *value = [tempDictionary valueForKey:key]; if ([value isKindOfClass:[NSString class]]) { if (value == (id)[NSNull null] || value == nil || value.length == 0) { [tempDictionary setValue:@"" forKey:key]; } } } return tempDictionary; } 

使用上述类别在您的字典上调用null free方法。

  NSDictionary *dict = [dict nullFreeDictionary]; 

//从Dictionary中删除NULL

 -(NSMutableDictionary *)removeNullFromDictionary : (NSMutableDictionary *)dict { // if (![dict isKindOfClass:[NSMutableDictionary class]]) // { // } dict = [[NSMutableDictionary alloc] initWithDictionary:dict]; for (NSString * key in [dict allKeys]) { if ([dict[key] isKindOfClass:[NSNull class]]) { [dict setValue:@"" forKey:key]; } else if ([dict[key] isKindOfClass:[NSMutableDictionary class]]||[dict[key] isKindOfClass:[NSDictionary class]]) { dict[key] = [self removeNullFromDictionary:[NSMutableDictionary dictionaryWithDictionary:dict[key]]]; } else if ([dict[key] isKindOfClass:[NSMutableArray class]]||[dict[key] isKindOfClass:[NSArray class]]) { dict[key] = [self removeNullFromArray:[NSMutableArray arrayWithArray:dict[key]]]; } } return dict; } 

//从Array中删除NULL

 -(NSMutableArray *)removeNullFromArray : (NSMutableArray *)arr { // if (![arr respondsToSelector:@selector(addObject:)]) // { // arr = [[NSMutableArray alloc] initWithArray:arr]; // } arr = [[NSMutableArray alloc] initWithArray:arr]; for (int cnt = 0; cnt<[arr count]; cnt++) { if ([arr[cnt] isKindOfClass:[NSNull class]]) { arr[cnt] = @""; } else if ([arr[cnt] isKindOfClass:[NSMutableDictionary class]]||[arr[cnt] isKindOfClass:[NSDictionary class]]) { arr[cnt] = [self removeNullFromDictionary:[NSMutableDictionary dictionaryWithDictionary:arr[cnt]]]; } else if ([arr[cnt] isKindOfClass:[NSMutableArray class]]||[arr[cnt] isKindOfClass:[NSArray class]]) { arr[cnt] = [self removeNullFromArray:[NSMutableArray arrayWithArray:arr[cnt]]]; } } return arr; }