2012-11-21 79 views
2

僞代碼:如何在NSMutableDictionary中找到重複項?

NSArray *arr1 = {"mike","george","Tim","Tom"...} 
NSArray *arr2 = {"mike","george","Chris","Adam"...} 
NSArray *arr3 = {"Don","george","mike","Tom"...} 
NSArray *arr4 = {"george","Nicole","Moe","mike"...} 

//Add these arrays to the dictionary 
for(int i=0; i<n, i++) 
    [dictionary addObject:arr[i]]; 

我想發現存在於所有的陣列,而不是一些重複的值(一個或多個)。 在此示例中,值將爲{「george」,「mike」}。

+0

你的意思所有數組共有的元素?另外,這是如何工作的,NSDictionary沒有方法'addObject:'。你的字典是否也是NSArray的對象? – WDUK

+0

對不起,它的NSMutableDictionary - 是的,對所有數組都是通用的。 – SMA2012

回答

-1

假設dictionary實際上是一個NSMutableArray,那麼像這樣將工作:

NSMutableArray *results = [[NSMutableArray alloc] init]; 

for(NSString *name in [dictionary objectAtIndex:0]) { 
    bool valid = true; 
    for(int i=1;i<[dictionary count];i++) { 
     if([[dictionary objectAtIndex:i] indexOfObject:name]==NSNotFound) { 
      valid=false; 
      break; 
     } 
    } 
    if(valid) 
     [results addObject:name]; 
} 
+0

太好了 - 我的代碼使用NSMutableDictionary,但是我能夠做出更改。 – SMA2012

+0

[NSMutableDictionaryInstance values]或[NSMutableDictionaryInstance keys]將產生一個NSArray供您使用上面的for循環遍歷。 – hd1

+0

@ SMA2012,你應該讓你的條款直 - 你沒有一個可變的字典,或者這個代碼不起作用。你有什麼是一個可變數組。 – rdelmar

3
NSArray *arr1 = @[@"mike",@"george",@"Tim",@"Tom" ]; 
NSArray *arr2 = @[@"mike",@"george",@"Chris",@"Adam" ]; 
NSArray *arr3 = @[@"Don",@"george",@"mike",@"Tom" ]; 
NSArray *arr4 = @[@"george",@"Nicole",@"Moe",@"mike" ]; 

NSMutableSet *intersection = [NSMutableSet setWithArray:arr1]; 
[intersection intersectSet:[NSSet setWithArray:arr2]]; 
[intersection intersectSet:[NSSet setWithArray:arr3]]; 
[intersection intersectSet:[NSSet setWithArray:arr4]]; 

NSArray *duplicates = [intersection allObjects]; 

NSLog(@"duplicates=%@", duplicates); 

重複包含與出現在他們所有的值的數組:

duplicates=(
    mike, 
    george 
) 
+0

謝謝 - 除了我接受的答案之外,這是另一種簡單的方法。我嘗試了這種方法,並且工作得很好。 – SMA2012

相關問題