2010-12-03 4 views
1

Я пытаюсь создать NSDictionary с помощью метода dictionaryWithDictionary. Однако мой первый NSDictionary A может иметь несколько ключей с пустыми значениями. Как я могу создать B, у которого нет никаких ключей с пустыми значениями? Я делаю все это для заполнения UITableView строками, которые соответствуют каждому непустому ключу в NSDictionary.Копирование NSDictionary без пустых значений?

+2

Что такое «пустое значение» в данном случае? NSDictionary не допускает значения «nil». – 2010-12-03 23:33:06

+0

Ключ с переменной, которая является пустой. – 2010-12-03 23:37:02

ответ

1

Как о чем-то вроде этого:

NSMutableDictionary *destDictionary = [NSMutableDictionary dictionaryWithCapacity:[sourceDictionary count]]; 
NSEnumerator *keyEnumerator = [[sourceDictionary allKeys] objectEnumerator]; 
id key; 
while (key = [keyEnumerator nextObject]) 
    { 
    NSString *object = [sourceDictionary objectForKey:key]; 
    if ([object length] == 0) 
     continue; 
    [destDictionary setObject:object forKey:key]; 
    } 
0

Вы также можете использовать тест блока, отфильтровывая ключи, значение которых имеет длину и создать свой новый словарь из этого.

NSSet *keySet = [dictionary keysOfEntriesPassingTest: 
       ^(id key, id obj, BOOL *stop) { 
        return (BOOL)[obj length]; 
       }]; 

NSArray *keys = [keySet allObjects]; 
NSArray *nonEmptyObjects = [dictionary objectsForKeys:keys notFoundMarker:@""]; 
NSDictionary *newDict = [NSDictionary dictionaryWithObjects:nonEmptyObjects 
                forKeys:keys];