2013-07-02 7 views
4

У меня есть NSArray с NSDictionary и пытается удалить дубликаты с помощью следующего кода:IOS distinctUnionOfObjects не возвращает все содержимое словарей

NSDictionary *arnold = @{@"name" : @"arnold", @"state" : @"california"}; 
NSDictionary *jimmy = @{@"name" : @"jimmy", @"state" : @"new york"}; 
NSDictionary *henry = @{@"name" : @"henry", @"state" : @"michigan"}; 
NSDictionary *woz = @{@"name" : @"woz", @"state" : @"california"}; 

NSArray *people = @[arnold, jimmy, henry, woz]; 

NSMutableArray *results=[[NSMutableArray alloc]initWithArray: [people valueForKeyPath:@"@distinctUnionOfObjects.state"]]; 
NSLog(@"results %@", results); 

это выход, я получаю от NSLog:

results (
    california, 
    michigan, 
    "new york" 
) 

Вопрос: как добавить полные каталоги в массив?

+3

, что можно ожидать, что результаты содержат? вы хотите уникальные значения для состояния, так что это должно быть arnold или woz для california? – wattson12

ответ

2

@distinctUnionOfObjects возвращает только уникальное значение объекта, указанное этим свойством, а не самими объектами.

Вы можете попробовать это:

NSDictionary *arnold = @{@"name" : @"arnold", @"state" : @"california"}; 
NSDictionary *jimmy = @{@"name" : @"jimmy", @"state" : @"new york"}; 
NSDictionary *henry = @{@"name" : @"henry", @"state" : @"michigan"}; 
NSDictionary *woz = @{@"name" : @"woz", @"state" : @"california"}; 

NSArray *people = @[arnold, jimmy, henry, woz]; 

NSMutableArray *uniqueArray = [[NSMutableArray alloc] init]; 
NSMutableSet *checkedStates = [[NSMutableSet alloc] init]; 

for (NSDictionary *person in people) { 

    NSString *currentStateName = person[@"state"];   
    BOOL isDuplicateState = [checkedStates containsObject:currentStateName]; 

    if (!isDuplicateState) { 
     [uniqueArray addObject:person]; 
     [checkedStates addObject:currentStateName]; 
    } 
} 

NSLog(@"Results %@", uniqueArray); 

Выход из NSLog будет:

Results (
     { 
     name = arnold; 
     state = california; 
    }, 
     { 
     name = jimmy; 
     state = "new york"; 
    }, 
     { 
     name = henry; 
     state = michigan; 
    } 
) 
Смежные вопросы